1、LogFileAppender的使用经验
使用VS2010新建TestForm工程,使用log4net的步骤如下:
1、引用log4net.dll(最新的版本是1.2.13);
2、新建的项目没有App.config文件,添加新建项“应用程序配置文件” App.config;
3、在App.config中添加如下内容:
<configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net-net-1.0"/> </configSections> <log4net> <root> <level value="ALL"/> <appender-ref ref="LogFileAppender"/> </root> <appender name="LogFileAppender" type="log4net.Appender.FileAppender"> <param name="File" value="log-file.txt"/> <param name="AppendToFile" value="true"/> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] <%X{auth}>%n - %m%n"/> </layout> </appender> </log4net>
4、在Properties的AssemblyInfo.cs文件末尾添加如下内容:
[assembly: log4net.Config.XmlConfigurator(ConfigFileExtension = "config", Watch = true)]
5、添加一个button,所有代码如下:
namespace TestForm { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { log4net.ILog log = log4net.LogManager.GetLogger("My1stLogger"); log.Debug("hello"); } } }
6、运行后点击button,在Debug文件夹(TestForm.exe所在的文件夹)下,有log-file.txt文件,打开内容如下:
2014-06-10 14:05:30,561 [9] DEBUG My1stLogger [(null)] <(null)> - hello 2014-06-10 14:05:30,679 [9] DEBUG My1stLogger [(null)] <(null)> - hello 2014-06-10 14:05:31,037 [9] DEBUG My1stLogger [(null)] <(null)> - hello 2014-06-10 14:05:31,249 [9] DEBUG My1stLogger [(null)] <(null)> - hello
7、格式符含义(转换模式(ConversionPattern)):
%d:打印日志的时间,精确到毫秒【2014-06-10 14:38:11,112】
%n:回车;
%m:日志内容;
%c:你在程序中使用【log4net.ILog log = log4net.LogManager.GetLogger("My1stLogger");】创建的日志的名字My1stLogger;
%p:日志级别或者叫信息类型(Fatal--Debug--Info--......);
%F:所在类或者叫所在文件名,比如【D:\TestForm\Form1.cs】
%L:打印日志的语句所在文件中的行号。
%-数字:表示该项的最小长度,如果不够用空格填充。
---------------------
%m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息
%n(new line):换行
%d(datetime):输出当前语句运行的时刻
%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
%t(thread id):当前语句所在的线程ID
%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等
%c(class):当前日志对象的名称,例如:
模式字符串为:%-10c -%m%n
代码为:
ILog log=LogManager.GetLogger(“Exam.Log”);
log.Debug(“Hello”);
则输出为下面的形式:
Exam.Log - Hello
%L:输出语句所在的行号
%F:输出语句所在的文件名
%-数字:表示该项的最小长度,如果不够,则用空格填充
例如,转换模式为%r [%t]%-5p %c - %m%n 的 PatternLayout 将生成类似于以下内容的输出:
176 [main] INFO org.foo.Bar - Located nearest gas station.
---------------------
2、RollingFileAppender
TestForm2演示程序的配置文件:
注意:对于Header和Footer,程序每重新启动一次,会产生新的header和footer。
<?xml version="1.0"?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net-net-1.0"/> </configSections> <log4net> <!--使用Rolling方式记录日志按照日来记录日志--> <appender name="RunLog" type="log4net.Appender.RollingFileAppender"> <!--文件名,可以相对路径,也可以绝对路径,这里只给定了文件夹--> <file value="log\\runtime\\"/> <!--最小锁定模型以允许多个进程可以写入同一个文件,解决文件独占问题--> <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/> <!--是否增加文件--> <appendToFile value="true"/> <!--日志追加类型,Date为按日期增加文件,Size为按大小--> <rollingStyle value="Date"/> <!--文件命名格式,非日期参数化要进行转义,如自定义文件后缀--> <datePattern value="yyyyMM\\yyyy-MM-dd".log""/> <!--是否固定文件名--> <staticLogFileName value="false"/> <!--内容布局--> <layout type="log4net.Layout.PatternLayout"> <!--头部--> <header value="----------------------header-------------------------- "/> <!--结尾--> <footer value="----------------------footer-------------------------- "/> <!--输出格式化--> <conversionPattern value="当前时间:%d [%p] %m %n"/> </layout> <!--过滤器--> <filter type="log4net.Filter.LevelRangeFilter"> <!--只接受最小等级与最大等级之间的日志输出,这里只接受INFO级别的输出--> <param name="LevelMin" value="INFO"/> <param name="LevelMax" value="INFO"/> </filter> </appender> <appender name="ErrorLog" type="log4net.Appender.RollingFileAppender"> <file value="log\\error\\"/> <appendToFile value="true"/> <rollingStyle value="Date"/> <datePattern value="yyyyMM\\yyyy-MM-dd".log""/> <staticLogFileName value="false"/> <layout type="log4net.Layout.PatternLayout"> <header value="----------------------header-------------------------- "/> <footer value="----------------------footer-------------------------- "/> <conversionPattern value="当前时间:%d 错误类型:[%p] 信息:%m 所在类:%F 所在行:%L %n"/> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <!--只接受最小等级与最大等级之间的日志输出,其他的被过滤,这里接受WARN(警告),ERROR(错误),FATAL(致命)级别的输出--> <param name="LevelMin" value="WARN"/> <param name="LevelMax" value="FATAL"/> </filter> </appender> <!--定义日志的输出媒介--> <root> <!--RollingFileAppender事件日志--> <appender-ref ref="RunLog"/> <appender-ref ref="ErrorLog"/> </root> </log4net> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> </startup> </configuration>