原因
- 日志管理其实是一件很重要的事情,但是貌似一些开发中并不是很在意,但是我对于这一块还是觉得应该重视起来的,所以对于C#中使用比较广泛的包---
log4net
的使用做了一个基本的总结,同时也是为了方便日后可以直接使用。
安装
- 安装截图

基本使用
配置
- 可以新建一个配置文件,取名
log4net
。

- 设置属性,复制到目录下。

- 在配置文件内书写基本的配置信息,以下是我个人使用的配置,后续会继续补充,一开始了解也不是很多。
<configuration>
<log4net>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="log\\"/>
<appendToFile value="true"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
<encoding value="utf-8"/>
<staticLogFileName value="false"/>
<datePattern value="yyyyMM\\yyyyMMdd'.txt'" />
<param name="MaxSizeRollBackups" value="100" />
<rollingStyle value="Date"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline %nDatetime:%date %nHostName:%property{log4net:HostName} %nThreadID:[%thread] %nLogLevel: %-5level %nClassName:%logger property: [%property{NDC}] - %nDescription:%message%newline %n" />
</layout>
</appender>
<root>
<level value="All" />
<appender-ref ref="RollingLogFileAppender" />
</root>
</log4net>
</configuration>
使用
方法1
- 需要在项目的
App.config
中添加对于log4net.config
的引用,例如我的配置。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
</startup>
<appSettings>
<add key="log4net.Config" value="Config/log4net.config"/>
<add key="log4net.Config.Watch" value="True"/>
</appSettings>
</configuration>
方法2
- 在需要记录日志的地方引用命名空间
using log4net;using log4net.Config;
- 在需要记录日志的类上定义
private static readonly ILog log = LogManager.GetLogger(typeof(Program));
- 基本使用方法是:
log.Debug("初始化form1");
using System.Windows.Forms;
using DevExpress.XtraBars.Ribbon;
using log4net;
using log4net.Config;
[assembly: XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
namespace WinFormsMain
{
public partial class Form1 : Form
{
private static readonly ILog log = LogManager.GetLogger(typeof(Program));
public Form1()
{
InitializeComponent();
}
private void simpleButton1_Click(object sender, System.EventArgs e)
{
log.Debug("初始化form1");
}
}
}
- 可以在项目的目录下看到有日志记录,注意是
bin\debug\log
下。
方法三
public static class LoggerHelper
{
private static ILoggerRepository? logRepository { get; set; }
private static ILog? _log;
private static ILog log
{
get
{
if (_log == null)
ConfigureLogger();
return _log;
}
}
private static ILog ConfigureLogger(string respositoryName = "PQSoftLog", string logConfigFilePath = "log4net.config")
{
logRepository = LogManager.CreateRepository(respositoryName);
XmlConfigurator.Configure(logRepository, new FileInfo(logConfigFilePath));
_log = LogManager.GetLogger(respositoryName, "RollingLogFileAppender");
return _log;
}
public static void Info(string msg, [CallerMemberName] string memberName = "") => log.Info($"{memberName}\t{msg}");
public static void Debug(string msg, [CallerMemberName] string memberName = "") => log.Debug($"{memberName}\t{msg}");
public static void Error(string msg, [CallerMemberName] string memberName = "") => log.Error($"{memberName}\t{msg}");
public static void Warn(string msg, [CallerMemberName] string memberName = "") => log.Warn($"{memberName}\t{msg}");
public static void Fatal(string msg, [CallerMemberName] string memberName = "") => log.Fatal($"{memberName}\t{msg}");
public static void Error(Exception ex, [CallerMemberName] string memberName = "") => log.ErrorExt($"{memberName}\t{ex.Message}", ex);
}
Tips
- 还是比较推荐直接使用代码的形式加载,更加灵活而且易于配置。