实现的输出方式

  • AdoNetAppender 将日志记录到数据库中。可以采用SQL和存储过程两种方式。

  • AnsiColorTerminalAppender 将日志高亮输出到ANSI终端。

  • AspNetTraceAppender 能用asp.net中Trace的方式查看记录的日志。

  • BufferingForwardingAppender 在输出到子Appenders之前先缓存日志事件。

  • ConsoleAppender 将日志输出到应用程序控制台。

  • EventLogAppender 将日志写到Windows Event Log。

  • FileAppender 将日志输出到文件。

  • ForwardingAppender 发送日志事件到子Appenders。

  • LocalSyslogAppender 将日志写到local syslog service (仅用于UNIX环境下)。

  • MemoryAppender 将日志存到内存缓冲区。

  • NetSendAppender 将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。

  • OutputDebugStringAppender 将日志输出到Debuger,如果程序没有Debuger,就输出到系统Debuger。如果系统Debuger也不可用,将忽略消息。

  • RemoteSyslogAppender 通过UDP网络协议将日志写到Remote syslog service。

  • RemotingAppender 通过.NET Remoting将日志写到远程接收端。

  • RollingFileAppender 将日志以回滚文件的形式写到文件中。

  • SmtpAppender 将日志写到邮件中。

  • SmtpPickupDirAppender 将消息以文件的方式放入一个目录中,像IIS SMTP agent这样的SMTP代理就可以阅读或发送它们。

  • TelnetAppender 客户端通过Telnet来接受日志事件。

  • TraceAppender 将日志写到.NET trace 系统。

  • UdpAppender 将日志以无连接UDP数据报的形式送到远程宿主或用UdpClient的形式广播。

过滤器

  • DenyAllFilter 阻止所有的日志事件被记录

  • LevelMatchFilter 只有指定等级的日志事件才被记录

  • LevelRangeFilter 日志等级在指定范围内的事件才被记录

  • LoggerMatchFilter 与Logger名称匹配,才记录

  • PropertyFilter 消息匹配指定的属性值时才被记录

  • StringMathFilter 消息匹配指定的字符串才被记录

日志的等级

OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL

常用配置方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
/*log4net的定义*/
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net>
/*主业务日志 serviceTest*/
<logger name="serviceTest" additivity="false">
<level value="DEBUG" />
<appender-ref ref="RollingFileRuleLog" />
</logger>
<appender name="RollingFileRuleLog" type="log4net.Appender.RollingFileAppender,log4net" >
/*为了达到根据GetLogger的参数,分不同文件夹输出日志的效果,这里/log前的文件夹名要和这个logger的name一样 */
<param name="File" type="" value="./logs/serviceTest/serviceTest.log" />

/*记录日志写入文件时,不锁定文本文件,防止多线程时不能写Log,官方说线程非安全*/
<LockingModel type="log4net.Appender.FileAppender+MinimalLock" />

/*是否追加到文件*/
<param name="AppendToFile" value="true" />

/*使用Unicode编码*/
/*<Encoding value="UTF-8" />*/

/*按照何种方式产生多个日志文件(日期[Date],文件大小[Size],混合[Composite])*/
<param name="RollingStyle" value="size" />

/*每个文件的大小。只在混合方式与文件大小方式下使用。超出大小后在所有文件名后自动增加正整数重新命名,数字最大的最早写入。可用的单位:KB|MB|GB。不要使用小数,否则会一直写入当前日志*/
<param name="maximumFileSize" value="10MB" />

/*最多产生的日志文件数,超过则只保留最新的n个。设定值value="-1"为不限文件数*/
<param name="MaxSizeRollBackups" value="10" />

/*是否只写到一个文件中*/
<param name="StaticLogFileName" value="false" />

<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %l- %m%n%exception" />
</layout>
</appender>
/*默认日志*/
<root>
<level value="Info" />
<appender-ref ref="RootRollingFile" />
</root>
<appender name="RootRollingFile" type="log4net.Appender.RollingFileAppender,log4net" >
<param name="File" type="" value="./logs/Common/CommonLog.TXT" />
<LockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="size" />
<param name="maximumFileSize" value="10MB" />
<param name="MaxSizeRollBackups" value="10" />
<param name="StaticLogFileName" value="false" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d [%t] %-5p %l- %m%n%exception%n" />
</layout>
</appender>
</log4net>
</configuration>

写数据库配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
CREATE TABLE [Log] (
[ID] [int] IDENTITY (1, 1) NOT NULL ,
[Date] [datetime] NOT NULL ,
[Thread] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[Level] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[Logger] [varchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,
[Operator] [int] NULL ,
[Message] [text] COLLATE Chinese_PRC_CI_AS NULL ,
[ActionType] [int] NULL ,
[Operand] [varchar] (300) COLLATE Chinese_PRC_CI_AS NULL ,
[IP] [varchar] (20) COLLATE Chinese_PRC_CI_AS NULL ,
[MachineName] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,
[Browser] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[Location] [text] COLLATE Chinese_PRC_CI_AS NULL ,
[Exception] [text] COLLATE Chinese_PRC_CI_AS NULL
)
<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender,log4net">
/*BufferSize为缓冲区大小,只有日志记录超设定值才会一块写入到数据库*/
<bufferSize value="10" /><!—或写为<param name="BufferSize" value="10" />-->

/*引用*/
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

/*连接数据库字符串*/
<connectionString value="data source=.;initial catalog=Test;integrated security=false;persist security info=True;User ID=sa;Password=;" />

/*插入到表Log*/
<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Operator],[Message],[ActionType],[Operand],[IP],[MachineName],[Browser],[Location],[Exception]) VALUES (@log_date, @thread, @log_level, @logger,@operator, @message,@action_type,@operand,@ip,@machineName,@browser,@location,@exception)" />

/*日志记录时间,RawTimeStampLayout为默认的时间输出格式*/
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>

/*线程号*/
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
/*长度不可以省略,否则不会输出*/
<size value="100" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>

/*日志等级*/
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="100" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
</parameter>

/*日志记录类名称*/
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="200" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>

/*操作者。这个是自定义的输出字段,使用重新实现的布局器ReflectionLayout*/
<parameter>
<parameterName value="@operator" />
/*设置为Int32时只有bufferSize的 value<="1"才正确输出,没有找出原因。*/
<dbType value="Int16" />
<layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
<conversionPattern value="%property{Operator}" />
</layout>
</parameter>

/*操作对象*/
<parameter>
<parameterName value="@operand" />
<dbType value="String" />
<size value="300" />
<layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
<conversionPattern value="%property{Operand}" />
</layout>
</parameter>

/*IP地址*/
<parameter>
<parameterName value="@ip" />
<dbType value="String" />
<size value="20" />
<layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
<conversionPattern value="%property{IP}" />
</layout>
</parameter>

/*机器名*/
<parameter>
<parameterName value="@machineName" />
<dbType value="String" />
<size value="100" />
<layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
<conversionPattern value="%property{MachineName}" />
</layout>
</parameter>

/*浏览器*/
<parameter>
<parameterName value="@browser" />
<dbType value="String" />
<size value="50" />
<layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
<conversionPattern value="%property{Browser}" />
</layout>
</parameter>

/*日志消息*/
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="3000" />
<layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
<conversionPattern value="%property{Message}" />
</layout>
</parameter>

/*动作类型*/
<parameter>
<parameterName value="@action_type" />
<dbType value="Int16" />
<layout type="TGLog.ExpandLayout2.ReflectionLayout,TGLog">
<conversionPattern value="%property{ActionType}" />
</layout>
</parameter>

/*记录日志的位置*/
<parameter>
<parameterName value="@location" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%location" />
</layout>
</parameter>

/*异常信息。ExceptionLayout 为异常输出的默认格式*/
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>

关联配置文件

  • 项目的AssemblyInfo.cs

    [assembly: log4net. Config.XmlConfigurator(ConfigFileExtension = “log4net”, Watch = true)]

  • 根目录的Program.cs中的Main方法

  • 根目录的Global.asax.cs(没有新建一个)中的Application_Start方法

    log4net.Config.XmlConfigurator.Configure();

使用方式

log4net.ILog log = log4net.LogManager.GetLogger("ReflectionLayout");