Log4Net笔记(二)Apender(转)
转自:
http://www.cnblogs.com/Henllyee/archive/2010/02/27/1674913.html
在前面的一篇文章中对log4net进行了大体的介绍(已经距离很长时间了),说明了logger、appender等组件的作用。在本篇文章中将详细说明几个常用的appender的使用。
ConsoleAppender
我们可以直接看出来ConsoleAppender的作用就是将消息输出在控制台上:
1.
<appender name=
"ConsoleAppender"
2.
type=
"log4net.Appender.ConsoleAppender"
>
3.
<layout type=
"log4net.Layout.PatternLayout"
>
4.
<param name=
"ConversionPattern"
5.
value=
"%d [%t] %-5p %c [%x] - %m%n"
/>
6.
</layout>
7.
</appender>
我们来看看一段测试代码:
01.
[Test]
02.
public
void
TestLogErro()
03.
{
04.
_logM.Erro(
new
SysLogMessage{
05.
Message=
"测试"
,
06.
UserName=
"Henllyee"
,
07.
Category=
"Debug"
,
08.
URL=
"http://henllyee.cnblogs.com"
09.
});
10.
11.
}
我们来看看效果:
EventLogAppender
EventLogAppender的作用是将日志写入事件查看器中。我们来看下配置:
1.
<appender name=
"EventLogAppender"
type=
"log4net.Appender.EventLogAppender"
>
2.
<layout type=
"log4net.Layout.PatternLayout"
>
3.
<conversionPattern value=
"%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"
/>
4.
</layout>
5.
</appender>
看看效果:
FileAppender
FileAppender的输出源是只将消息输出的文件上。
01.
<appender name=
"LogAllToFile"
type=
"log4net.Appender.FileAppender"
>
02.
<file value=
"G:\学习资料\Log4Net\Log4NetDemo\Log4NetDemo\bin\Debug\DemoLog.log"
/>
03.
<appendToFile value=
"true"
/>
04.
<!--<layout type=
"log4net.Layout.PatternLayout"
>
05.
<conversionPattern value=
"%d [%t] %-5l - %m%n%n"
/>
06.
</layout>-->
07.
<layout type=
"HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils"
>
08.
<conversionPattern value=
"%date [%thread] %-5level %logger [%property{NDC}] - %SysMessage%newline"
/>
09.
</layout>
10.
</appender>
效果:
RollingFileAppender
RollingFileAppender是输出源也是输出到文件中,只是以自增长的方式。配置的xml代码:
01.
<appender name=
"RollingLogFileAppender"
type=
"log4net.Appender.RollingFileAppender"
>
02.
<param name=
"File"
value=
"log/system_log_"
/>
03.
<param name=
"AppendToFile"
value=
"true"
/>
04.
<param name=
"MaxSizeRollBackups"
value=
"100"
/>
05.
<param name=
"MaximumFileSize"
value=
"1KB"
/>
06.
<param name=
"StaticLogFileName"
value=
"false"
/>
07.
<param name=
"DatePattern"
value=
"yyyyMMdd".log""
/>
08.
<param name=
"RollingStyle"
value=
"Date"
/>
09.
<layout type=
"HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils"
>
10.
<conversionPattern value=
"%date [%thread] %-5level %logger [%property{NDC}] - %SysMessage%newline"
/>
11.
</layout>
12.
</appender>
各个参数详细说明下:
1)File:文件开头名称;
2)AppendToFile:是否追加;
3)MaxSizeRollBackups:最大变换数量(-1表示不设置);
4)MaximumFileSize:文件的最大大小;
5)StaticLogFileName:日志文件名是否为静态;
6)RollingStyle:变换的形式;
7)DatePattern:日期的格式
我们看下运行的效果:
在上面的配置中文件的大小设置并不起作用,因为RollingStype设置为了Date,当设置为Composite的时候才会起作用。
AdoNetAppender
数据库记录的Appender。看看配置的代码:
01.
<appender name=
"ADONetAppender"
type=
"log4net.Appender.ADONetAppender"
>
02.
<!--BufferSize为缓冲区大小-->
03.
<param name=
"BufferSize"
value=
"1"
/>
04.
<connectionType value=
"System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
/>
05.
<connectionString value=
"database=HJRightPlat;server=(local);User ID=sa;Password=123456;"
/>
06.
<commandText value=
"INSERT INTO Sys_Log ([Date],[Thread],[Log_Level],[Logger],[Message],[Exception],[User],[Category],[URL],[Client_IP]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception,@User,@Category,@URL,@ClientIp)"
/>
07.
<parameter>
08.
<parameterName value=
"@log_date"
/>
09.
<dbType value=
"DateTime"
/>
10.
<layout type=
"log4net.Layout.RawTimeStampLayout"
/>
11.
</parameter>
12.
<parameter>
13.
<parameterName value=
"@thread"
/>
14.
<dbType value=
"String"
/>
15.
<size value=
"255"
/>
16.
<layout type=
"log4net.Layout.PatternLayout"
>
17.
<conversionPattern value=
"%thread"
/>
18.
</layout>
19.
</parameter>
20.
<parameter>
21.
<parameterName value=
"@log_level"
/>
22.
<dbType value=
"String"
/>
23.
<size value=
"50"
/>
24.
<layout type=
"log4net.Layout.PatternLayout"
>
25.
<conversionPattern value=
"%level"
/>
26.
</layout>
27.
</parameter>
28.
<parameter>
29.
<parameterName value=
"@logger"
/>
30.
<dbType value=
"String"
/>
31.
<size value=
"255"
/>
32.
<layout type=
"log4net.Layout.PatternLayout"
>
33.
<conversionPattern value=
"%logger"
/>
34.
</layout>
35.
</parameter>
36.
<parameter>
37.
<parameterName value=
"@message"
/>
38.
<dbType value=
"String"
/>
39.
<size value=
"4000"
/>
40.
<layout type=
"HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils"
>
41.
<conversionPattern value=
"%SysMessage"
/>
42.
</layout>
43.
</parameter>
44.
<parameter>
45.
<parameterName value=
"@exception"
/>
46.
<dbType value=
"String"
/>
47.
<size value=
"2000"
/>
48.
<layout type=
"log4net.Layout.ExceptionLayout"
/>
49.
</parameter>
50.
<parameter>
51.
<parameterName value=
"@User"
/>
52.
<dbType value=
"String"
/>
53.
<size value=
"50"
/>
54.
<layout type=
"HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils"
>
55.
<conversionPattern value=
"%UserName"
/>
56.
</layout>
57.
</parameter>
58.
<parameter>
59.
<parameterName value=
"@Category"
/>
60.
<dbType value=
"String"
/>
61.
<size value=
"50"
/>
62.
<layout type=
"HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils"
>
63.
<conversionPattern value=
"%Category"
/>
64.
</layout>
65.
</parameter>
66.
<parameter>
67.
<parameterName value=
"@URL"
/>
68.
<dbType value=
"String"
/>
69.
<size value=
"50"
/>
70.
<layout type=
"HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils"
>
71.
<conversionPattern value=
"%SysURL"
/>
72.
</layout>
73.
</parameter>
74.
<parameter>
75.
<parameterName value=
"@ClientIp"
/>
76.
<dbType value=
"String"
/>
77.
<size value=
"50"
/>
78.
<layout type=
"HJRight.ProjectBase.Utils.Log.Extentions.HJRightLayout,HJRight.ProjectBase.Utils"
>
79.
<conversionPattern value=
"%ClientIP"
/>
80.
</layout>
81.
</parameter>
82.
</appender>
说说里面几个主要的属性:
1)connectionType :数据连接类型,上面的是sql server;
2)connectionString :数据连接;
3)commandText :执行的命令;
4)parameter:指定各个参数的值;
看看运行的效果:
上面的配置中用到了部分扩展,在后面的文章中会进行说明。
总结
在这篇blog中详细说明了几种常用的Appender,还有其他许多Appender,如SmtpAppender、TraceAppender等等。在下篇blog中我会说下layout的使用。