概述
log4net是一个开源日志记录组件。用log4net可以方便地将日志信息记录到文件、控制台、Windows事件日志和数据库中。其日志级别从低到高有:
- ALL
- DEBUG
- INFO
- WARN
- ERROR
- FATAL
- OFF
一个实例
先来看一个例子,了解下log4net是如何工作的。
1 using log4net;
2
3 namespace Log4net_tutorial
4 {
5 class Program
6 {
7 private static readonly ILog log = LogManager.GetLogger(typeof(Program));
8
9 static void Main(string[] args)
10 {
11 log.Info("first log info...");
12
13 log.Info("second log info...");
14 }
15 }
16 }
log4net.config文件中的配置如下:
<configuration>
<log4net>
<appender name="Console" type="log4net.Appender.ConsoleAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{yyyy-MM-dd} [%thread] %-5level - %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="Console" />
</root>
</log4net>
</configuration>
运行结果如图:
从这个例子中可以看出log4net的使用非常简单,在配置文件中配置相应的信息后,只需要很少的代码就可以轻松的输入日志。
配置文件
配置程序集
[assembly:log4net.Config.XmlConfigurator(ConfigFile="log4net.config",Watch=true)]
log4net的XmlConfiguratorAttribute 配置允许三个属性:
- ConfigFile
配置文件的名字,程序会从程序的根目录(AppDomain.CurrentDomain.BaseDirectory)下找该名字的文件。该属性不能和ConfigFileExtension一块使用。
- ConfigFileExtension
指定配置文件的后缀名,如果当前文件为TestApp.exe,该属性设置成了config,则程序会从当前程序的根目录(AppDomain.CurrentDomain.BaseDirectory)找一个名为TestApp.exe.config的配置文件。
- Watch
如果该属性设置成true,则表示每次log4net的配置文件有改动时,都会重新加载配置文件。
log4net的结构
要使用log4net,需要在配置文件的*节点<configuration>下增加<log4net>子节点。log4net主要有Appender、Layout和Logger等组件。
- Appendr(附着器)
如下是一个控制台输出日志的Appender的例子,
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
</layout>
</appender>
Appender有两个必要的属性:name
和
type。name属性会在<appender-ref>节点中作为调用Appender的标识。type除了上边提到的控制台输出日志的log4net.Appender.ConsoleAppender,常用的还有 log4net.Appender.FileAppender(输出日志到文本文件)、log4net.Appender.AdoNetAppender(输出日志到数据库),更多Appender的信息见Apache上的log4net官方文档。
- Layout(布局)
Layout是Appender的一个子节点,用来控制输出日志的内容和格式等信息。如下图的例子
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
</layout>
- Logger(记录器)
Logger有两种:Root Logger和普通的Logger。
root Logger:
<root>
<level value="INFO" />
<appender-ref ref="ConsoleAppender" />
</root>
普通的Logger:
<logger name="LoggerName">
<level value="DEBUG" />
<appender-ref ref="ConsoleAppender" />
</logger>
在调用log4net的时候,用到的GetLogger,如果其中的参数可以匹配到logger的name属性,则使用匹配的Logger,如果干没有找到匹配的name则使用Root Logger
参考资料: