Log4Net使用

1.下载文件

下载地址:http://logging.apache.org/log4net/,有源码和dll文件可供下载,有能力的大神可以研究研究源码。

解压之后log4net-1.2.13\bin文件夹下面会有四个文件夹,cli,mono,net,net-cp,前连个不知道是在什么情况下用的,后两个主要是针对不同的.net编译程序,每个程序或者是类库都有一个目标框架属性,可右键项目,点击属性查看,.NET Framework 4 对应net,.NET Framework 4 Client Profile 对应 net-cp。

.NET Framework 4 Client Profile 是 .NET Framework 4 已针对客户端应用程序进行优化的一个子集。 它提供了适用于大多数客户端应用程序的功能,包括 Windows Presentation Foundation (WPF)、Windows 窗体、Windows Communication Foundation (WCF) 和 ClickOnce 功能。 这使得以 .NET Framework 4 Client Profile 为目标的应用程序的部署速度加快且安装包变小。

2.配置

log4net 有四种主要的组件,分别是Logger(记录器), Repository(库), Appender(附着器)以及 Layout(布局).

日志级别

级别

允许的方法

Boolean属性

优先级别

OFF

 

 

Highest

FATAL

void Fatal(...);

bool IsFatalEnabled;

 

RROR

void Error(...);

bool IsErrorEnabled;

 

WARN

void Warn(...);

bool IsWarnEnabled;

 

INFO

void Info(...);

bool IsInfoEnabled;

 

DEBUG

void Debug(...);

bool IsDebugEnabled;

 

ALL

 

 

Lowest

 

我们可根据不同情况,输出不同级别的日志。

将下载的对应版本的log4net.dll文件引入到工程中,然后再工程的AssemblyInfo.cs文件中添加

1 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config")]

上面的是单独文件的配置,如果我们将log4net的配置放入到app.config或者是web.config,则在AssemblyInfo.cs文件中添加配置时,不需要设置ConfigFile = "log4net.config", 如下:

1 [assembly: log4net.Config.XmlConfigurator()]

这个为log4net的初始化设置,当然我们也可以在代码中进行初始化,但是我比较喜欢在AssemblyInfo.cs文件中进行初始化。

如下面的代码,与上面的效果是一样的:

1 log4net.Config.XmlConfigurator.Configure(new FileInfo("log4net.Config"));

配置文件log4net.config:

A.XML

 1 <?xml version="1.0" encoding="utf-8" ?>
 2 <configuration>
 3   <log4net>
 4     <logger name="loginfo">
 5       <level value="INFO" />
 6       <appender-ref ref="LogCommon" />
 7     </logger>
 8     <appender name="LogCommon" type="log4net.Appender.RollingFileAppender">
 9       <param name="File" value="logs\"/>
10       <param name="AppendToFile" value="true"/>
11       <param name="maxSizeRollBackups" value="10"/>
12       <param name="maximumFileSize" value="1MB"/>
13       <param name="staticLogFileName" value="false"/>
14       <param name="DatePattern" value="yyyy-MM/yyyy-MM-dd&quot;.log&quot;" />
15       <param name="RollingStyle" value="Composite" />
16       <layout type="log4net.Layout.XmlLayout">
17         <param name="Header" value="&lt;?xml version=&quot;1.0&quot; ?&gt;&lt;logs&gt;" />
18         <param name="Footer" value="&lt;/logs&gt;" />
19       </layout>
20       <filter type="log4net.Filter.LevelRangeFilter">
21         <param name="LevelMin" value="INFO" />
22         <param name="LevelMax" value="RROR" />
23       </filter>
24     </appender>
25   </log4net>
26 </configuration>

以上是将日志存储到xml中的配置文件,根据官网的提示,添加了Header和Footer。因为默认的为xmlNode,当使用XMLDocument访问的时候,会提示不是有效的xml文件。

当然如果这种生成xml的方式还是不能满足工作需要的话,可以访问http://blogs.lessthandot.com/index.php/DesktopDev/MSTech/making-an-xmllayout-for-log4net

有大能自定义了XMLLayout,但是代码是VB的,可参照或者扩展。

  参数说明:

   type="log4net.Appender.RollingFileAppender",log4net提供了各种可实现不同功能的Appender,具体可参考官方提供的帮助文档http://logging.apache.org/log4net/release/sdk/log4net.Appender.html,或者:@Anders Cui 翻译的 log4net的各种Appender配置示例

或者原文:http://logging.apache.org/log4net/release/config-examples.html

B.文本

如果想输出到文本,则将配置文件中的Layout的Type属性修改成:log4net.Layout.PatternLayout

1 <layout type="log4net.Layout.PatternLayout">
2         <param name="Header" value="[Header]\r\n"/>
3         <param name="Footer" value="[Footer]\r\n"/>
4         <param name="ConversionPattern" value="%d [%t] %-5p %c [%x]  - %m%n" />
5 </layout>

  参数说明

    Layout用法可参考:http://www.cnblogs.com/manhoo/archive/2009/06/25/1511066.html

    %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

    %L:输出语句所在的行号

    %F:输出语句所在的文件名

    %-数字:表示该项的最小长度,如果不够,则用空格填充

C.数据库(SQLServer 2008)

 1 <?xml version="1.0"?>
 2 <configuration>
 3   <log4net>
 4     <appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
 5       <bufferSize value="1" />
 6       <useTransactions value="false" />
 7       <connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
 8       <connectionString value="Data Source=192.168.1.99\SQLSERVER;Initial Catalog=RailWeightDB;User ID=sa; PWD=*******;" />
 9       <commandText value="INSERT INTO [RailWeightDB].[dbo].[SysLog]([ThreadName],[LevelName],[Message],[Exception],[CreateTime],[CreaterID]) VALUES (@thread,@level,@message,@exception,@time,@user)" />
10       <parameter>
11         <parameterName value="@thread" />
12         <dbType value="String" />
13         <size value="100" />
14         <layout type="log4net.Layout.PatternLayout">
15           <conversionPattern value="%t" />
16         </layout>
17       </parameter>
18       <parameter>
19         <parameterName value="@level" />
20         <dbType value="String" />
21         <size value="50" />
22         <layout type="log4net.Layout.PatternLayout">
23           <conversionPattern value="%p" />
24         </layout>
25       </parameter>
26       <parameter>
27         <parameterName value="@message" />
28         <dbType value="String" />
29         <size value="5000" />
30         <layout type="log4net.Layout.PatternLayout">
31           <conversionPattern value="%m" />
32         </layout>
33       </parameter>
34       <parameter>
35         <parameterName value="@exception" />
36         <dbType value="String" />
37         <size value="5000" />
38         <layout type="log4net.Layout.ExceptionLayout" />
39       </parameter>
40       <parameter>
41         <parameterName value="@time" />
42         <dbType value="DateTime" />
43         <layout type="log4net.Layout.RawTimeStampLayout" />
44       </parameter>
45       <parameter>
46         <parameterName value="@user" />
47         <dbType value="String" />
48         <size value="50" />
49         <layout type="log4net.Layout.PatternLayout">
50           <conversionPattern value="%X{user}" />
51         </layout>
52       </parameter>
53     </appender>
54     <!-- specify the level for some specific categories -->
55     <logger name="SysLog">
56       <level value="DEBUG"/>
57       <appender-ref ref="ADONetAppender"/>
58     </logger>
59   </log4net>
60 </configuration>

在配置数据库过程中遇到过好多麻烦,当然,过程是痛苦的,结果是美好的。

  参数说明

    bufferSize:一般设置为1,如果设置为10,则,我们写10次log才会被写入一次,这种可能会造成延迟更新,也就是说我10:10操作的日志,到10:15,buffer满了,此时才会写入到数据库中,如果协同交互较多,并且需要频繁写日志,则可根据实际情况,将其设置为较大的值。

    useTransactions :是否使用存储过程,bool类型。

    connectionType:其中Version,我看到过2.0,也看到过1.3,好像官网的就是1.3,然后我查了这个,据非官方说明,这个是.netframework的版本。

    %X{user}:%X代表的是MDC,如果不明白这个才是是怎么来的,可参考下面的注意事项以及Layout参数说明

    有大能总结了在使用数据库的4个注意事项,可参考一下:http://weblogs.asp.net/drnetjes/archive/2005/02/16/374780.aspx

原文地址:https://www.cnblogs.com/zhuhc/p/3447018.html