log4net, 是 apache.org 在 log4j的基础上推出的针对.NET程序的开源的日志组件。
log4net目前的最新版本是 1.2.10,log4net支持的日志保存方式,可谓丰富之极,包括:
上面的,各种日志保存方式的具体配置细节, 在这里
log4net的日志记录分为7级,从高到低为: OFF、FATAL、ERROR, WARN, INFO, DEBUG, ALL
要使用log4net,必须给log4net指定好配置文件, 有两种方法:
log4net的配置格式,大致如下:
<?xml version="1.0" encoding="utf-8" ?> <log4net debug="false"> <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="log.txt" /> <appendToFile value="true" /> <rollingStyle value="Composite" /> <datePattern value=".yyyyMMdd" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="1MB" /> <staticLogFileName value="true" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date %-5level %logger -%m%n" /> </layout> </appender> <root> <level value="WARN" /> <appender-ref ref="RollingLogFileAppender" /> </root> </log4net>
上面给出的是一个独立的log4net的配置文件,大体解释一下:
<log4net></log4net>是根,<root></root>是必须的,是所有日志格式的根,其中定义了,日志记录的基础级别,和当前启用的日志记录方式, 上面的 appender 将继承root的level
appender中的 type 指明了,采用哪种方式来记录日志,具体取值,大家去 这里 查看
layout是日志输出格式的定义:
%d, %date :表示当然的时间
%level : 表示日志的级别
%logger, %c:表示日志产生的主题,通常是所在的类名,便于定位问题
%t, %thread: 表示 所在进程
%L: 表示产生日志的代码所在的行数
%m, %message :表示日志的具体内容
%n, %newline: 换行
--------------------------------------------------------------------------
我上面的是一个多文件日志的配置, 每天产生一个日志文件,日志名字是
log.txt.20081228
的形式
下面重点说一下使用的具体步骤:
1. 加入 log4net.dll 的引用
2. 对于 web application 和 winform
在 AssemblyInfo.cs 中,加入
[assembly: log4net.Config.XmlConfigurator(ConfigFile="log4net.config", Watch=true)] //log4net.config 是配置文件的名称,可以自行设置 //Watch 是表示在程序运行期间是否监视该配置文件的变动
3. 对于 website 项目,需要在 global.asax.cs 里,加入
protected void Application_Start(Object sender, EventArgs e) { //配置log4net log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config")); }
4. 实际调用
class Program { private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); //System.Reflection.MethodBase.GetCurrentMethod().DeclaringType //是利用反射获取当前类的type,记录在日志中,便于定位日志发生的所在 static void Main(string[] args) { log.Error("这是一个错误日志"); log.Fatal("这是一个致命的错误日志"); log.Warn("这是一条警告日志"); log.Info("这是一条普通信息"); Console.Read(); } }