log4net使用总结
2012-06-20 17:08 xiashengwang 阅读(865) 评论(2) 编辑 收藏 举报一,log4net是什么
log4net架构下用于记录日志的开源组件,功能相当完善,免去了我们重复造轮子。我想不管是winform还是web都需要记录日志。
官网下载地址:http://logging.apache.org/log4net/
SDK地址:http://logging.apache.org/log4net/release/sdk/index.html
二,怎样使用
新建了一个LogHelper类包装了一下,自己使用起来也方便。
注意这一句[assembly:log4net.Config.XmlConfigurator(Watch=true)]不要忘了,否则读不到配置文件
※ xml的配置文件的话,ConfigFile是必须的。[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.xml", Watch = true)]
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using log4net;
[assembly:log4net.Config.XmlConfigurator(Watch=true)]
namespace Cshapr3._0NewFeature
{
/// <summary>
/// Log's Type
/// </summary>
public enum LogType
{
Debug,
Info,
Warning,
Error,
Fatal
}
/// <summary>
/// Log Output Helper,use log4net
/// author:wz
/// </summary>
public static class LogHelper
{
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
/// <summary>
/// Nomal Information Output
/// LogType:Info
/// </summary>
/// <param name="message">message</param>
public static void Write(string message)
{
WriteInner(LogType.Info, message, null);
}
/// <summary>
/// Error Information Output
/// LogType:Error
/// </summary>
/// <param name="message">message</param>
/// <param name="ex">exception</param>
public static void Write(string message, Exception ex)
{
WriteInner(LogType.Error, message, ex);
}
/// <summary>
/// special LogType's Information Output
/// </summary>
/// <param name="logType">LogType</param>
/// <param name="message">message</param>
/// <param name="ex">ex</param>
public static void Write(LogType logType, string message, Exception ex)
{
WriteInner(logType, message, ex);
}
private static void WriteInner(LogType logType, string message, Exception ex)
{
switch (logType)
{
case LogType.Debug:
log.Debug(message, ex);
break;
case LogType.Info:
log.Info(message, ex);
break;
case LogType.Warning:
log.Warn(message, ex);
break;
case LogType.Error:
log.Error(message, ex);
break;
case LogType.Fatal:
log.Fatal(message, ex);
break;
}
}
}
}
配置文件
在应用程序配置文件中配置的话,要加入下面的这个section
<section name ="log4net" type ="System.Configuration.IgnoreSectionHandler"/>
大多数情况我们都会用RollingFileAppender的记录方式,这个可以实现回滚,log文件满了会新建log1,log2进行记录。
看看下面的官方举例
1)按照文件大小分块。满100KB,会记入新的文件,最大10个文件后重新覆盖第一个文件。文件名如:log,log1,log2
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="log.txt" /> <appendToFile value="true" /> <rollingStyle value="Size" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="100KB" /> <staticLogFileName value="true" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender>
2)按照时间分块。后缀名带时间格式。如:log20070102
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="logfile" /> <appendToFile value="true" /> <rollingStyle value="Date" /> <datePattern value="yyyyMMdd-HHmm" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender>
3)按照时间和大小一起分组。保留每天的前10个1M的log文件。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="logfile" /> <appendToFile value="true" /> <rollingStyle value="Composite" /> <datePattern value="yyyyMMdd" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="1MB" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender>
4)每次程序启动都用一个单独的log,下次启动将上次的备份。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="logfile.txt" /> <appendToFile value="false" /> <rollingStyle value="Size" /> <maxSizeRollBackups value="-1" /> <maximumFileSize value="50GB" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender>
filter过滤级别:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<appender name="RollingFileAppender_Composite" type="log4net.Appender.RollingFileAppender"> <file value="log_composite.txt" /> <appendToFile value="true" /> <rollingStyle value="Composite" /> <datepattern value="yyyyMMddHHmm"/> <maxSizeRollBackups value="10" /> <maximumFileSize value="5KB" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <param name="LevelMin" value="FATAL"/> <param name="LevelMax" value="FATAL"/> </filter> </appender>
Appender部分参数的含义:
file:指定log文件名。如:<file value="log.txt" />
appendToFile:true表示在文件末尾追加,false:覆盖原有信息。这个应该是程序重新启动后对原log文件的处理方式,而不是指每写一次
都覆盖。
rollingStyle:Size表示按大小分块,Date表示按日期分块(这和datePattern指定的格式有极大的关系,如指定为“yyyyMMddHHmm”则没分钟都会生成一个log文件)。Composite表示兼容模式,前面两种模式同时制约有效。
datePattern:分组文件的日期后缀格式。如指定为“yyyyMMddHHmm”,生成的文件就是:log.txt201206211708。
maxSizeRollBackups:分块数。如:<maxSizeRollBackups value="10" />最大可以分成10个文件。
maximumFileSize:每个文件的最大Size。
staticLogFileName :true代表由file指定的文件名是固定的,也就是每次写入的都是log.txt这个文件。false:表示文件名不是固定的。rollingStyle为Date,Composite,这个属性不要指定。
conversionPattern:log出力的格式,这其中有很多log4net定义的参数,具体含义如下:
%thread 线程ID。
%message或%m 输出的消息内容。
%date{yyyy/MM/dd HH:mm:ss fff}:日期时间,不指定{}里的内容的话将使用默认格式,精确到毫秒。%d
%-5level log的级别,-5表示占用5个字符(左)。
%logger 表示调用log.Info,log.Error的类的全名。
%property{NDC} 输出NDC里的内容。
%newline或%n 换行。
%X{mdcName} 输出MDC里名为“mdcName”的对象的值。
root:这里定义了要使用的appender,通过appender-ref定义,还可以指定log的输出级别,通过level指定。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<root> <!--<level value="WARN" />--> <level value="ALL"/> <appender-ref ref ="LogFileAppender"/> <appender-ref ref ="RollingFileAppender"/> </root>
在App.config中的一个完整配置:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name ="log4net" type ="System.Configuration.IgnoreSectionHandler"/> </configSections> <appSettings> </appSettings> <log4net> <appender name="RollingFileAppender_Size" type="log4net.Appender.RollingFileAppender"> <file value="log_size.txt" /> <appendToFile value="true" /> <rollingStyle value="Size" /> <maxSizeRollBackups value="10" /> <maximumFileSize value="10KB" /> <staticLogFileName value="true" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <appender name="RollingFileAppender_Date" type="log4net.Appender.RollingFileAppender"> <file value="log_date.txt" /> <appendToFile value="true" /> <rollingStyle value="Date" /> <datepattern value="yyyyMMddHHmm"/> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <appender name="RollingFileAppender_Composite" type="log4net.Appender.RollingFileAppender"> <file value="log_composite.txt" /> <appendToFile value="true" /> <rollingStyle value="Composite" /> <datepattern value="yyyyMMddHHmm"/> <maxSizeRollBackups value="10" /> <maximumFileSize value="5KB" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <appender name="RollingLogFileAppender_Once" type="log4net.Appender.RollingFileAppender"> <file value="log_Once.txt" /> <appendToFile value="false" /> <rollingStyle value="Size" /> <maxSizeRollBackups value="-1" /> <maximumFileSize value="50GB" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </layout> </appender> <root> <!--<level value="WARN" />--> <level value="ALL"/> <appender-ref ref ="RollingFileAppender_Size"/> <appender-ref ref ="RollingFileAppender_Date"/> <appender-ref ref ="RollingFileAppender_Composite"/> <appender-ref ref ="RollingLogFileAppender_Once"/> </root> </log4net> </configuration>
三,理解配置文件
1,配置文件最详细的解释无疑是官方文档
http://logging.apache.org/log4net/release/config-examples.html
2,PatternLayout的参数该如何配置,每个参数的意思是什么,往往让我们感到迷惑。
在这里能找到全部的答案。(官方的当然是最详细的)
http://logging.apache.org/log4net/release/sdk/log4net.Util.PatternString.html
http://logging.apache.org/log4net/release/sdk/log4net.Layout.PatternLayout.html