log4net是为.NET提供的一个日志框架,它基于Apache的log4j。
主要的功能如下
- 可定制化的输出格式。普通日志格式、JSON等
- 结构化的日志。
- 适配多线程。
- 可以输出到多种不同的目标,如文件、终端、email等等。
本文简单介绍其使用,对于小项目的日志打印已经足够了。更多高阶用法,log4net有非常详尽的文档,可以参考 https://logging.apache.org/log4net/release/manual/introduction.html
本文包含如下内容。
- 创建一个WPF项目
- 下载log4net依赖
- 配置log4net依赖
- 打印日志
- 总结
1. 创建一个WPF项目
略
2. 下载log4net依赖
菜单栏Tools -> NuGet Package Manager -> Manage NuGet Package for Solution
或者 在右侧的 Solution Explorer窗格右击Solution也会弹出相关菜单。
在Browse
界面搜索log4net
,右侧选中我们的项目,Version选择合适的版本(一般最新),点击install
点击Apply
成功后 log4net 会出现在我们的解决方案的依赖列表中
3. 配置log4net依赖
log4net有3个主要的组件:loggers、appenders、layouts。
提供两种方式对日志系统进行配置:代码控制、配置文件。
本文采用配置文件的方式。
先创建App.config配置文件,并将其Copy to Output Directory
设置为 Copy if newer 或者 Copy Always。
App.config的内容如下
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net>
<root>
<level value="ALL"/>
</root>
<logger name="MainLog">
<level value="ALL"/>
<appender-ref ref="LogFileAppender"/>
</logger>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
<!-- 日志文件输出位置 -->
<param name="File" value="Log/logcat"/>
<!-- 日志等级过滤,只有>=INFO的日志才会被记录 -->
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="INFO"/>
</filter>
<!-- 自动追加 -->
<param name="AppenderToFile" value="true"/>
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<!-- 以日期进行备份 -->
<param name="RollingStyle" value="Date"/>
<!-- 单个日志的最大容量 -->
<param maximumFileSize="" value="10M"/>
<!-- 备份日志文件的最大数量 -->
<maxSizeRollBackups value="10" />
<param name="DatePattern" value="yyyyMMdd".log""/>
<param name="StaticLogFileName" value="false"/>
<!--输出格式-->
<!-- 样例:2023-12-28 11:36:56,630 INFO MainLog - Some Info log -->
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%date %level %logger - %message%newline"/>
</layout>
</appender>
</log4net>
</configuration>
4. 打印日志
下面的代码在MainWindow初始化时尝试打印日志
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "App.config", ConfigFileExtension = "config", Watch = true)]
namespace Demo
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
private static log4net.ILog logger = log4net.LogManager.GetLogger("MainLog");
public MainWindow()
{
logger.Debug("Some debug log"); /* 我们配置的日志最低等级为INFO,所以这里的DEBUG日志不会被输出到日志文件 */
logger.Info("Some Info log");
logger.Warn("Some Warn log");
logger.Error("Some Error log");
logger.Fatal("Some Fatal log");
}
}
}
最终的日志内容如下
2023-12-28 11:36:56,630 INFO MainLog - Some Info log
2023-12-28 11:36:56,636 WARN MainLog - Some Warn log
2023-12-28 11:36:56,636 ERROR MainLog - Some Error log
2023-12-28 11:36:56,637 FATAL MainLog - Some Fatal log
5. 总结
到这里已经满足基本项目需求,就不去研究更多复杂的配置了。