liquorbin

导航

log4net简易教程(一)

    看到很多博主把自己的心得经验分享出来,心里痒痒的,也想把自己的学习历程记录下来,因为好处多多啊,可以加深理解和备忘,可以和别人分享和探讨,可以提高写博水平,特别是技术博客,也可以记录成长之路,以后回过头来看看这些文章也蛮有趣的。既然写博好处多,就不要只停留在想法上,虽然刚开始比较难,慢慢会上路的,关键是坚持和热情。好了,开始自己博客园的第一篇技术博客吧,以后尽量每个星期要更新一篇博客。

   log4net是著名的日志记录组件log4家族中的重要一员,是从jlog4发展过来的.net版本。它可以以不同的等级,格式,媒介输出日志,应用比较广泛。它主要由logger,appender,layout这三部分组成,其中logger日志记录器,appender是输出媒介,输出媒介可以是文本,控制台,数据库等,layout主要是用来控制输出格式的。而这三者的大部分重要属性都可以通过配置文件来设置,当然,也可以通过代码来设置。但是有些属性是只读的,只能通过配置文件来设置属性值,因为它通过封装对可读写的属性封装成只读了,如logger的等级属性。

  使用logger的大部分工作都在对配置文件的配置上。可以配置在应用程序设置文件上,也可以配置在其他的xml文件上。先来说下在配置文件下如何设置log4net.

首先,需要声明log4net配置项,这样才能在配置文件中对这些配置进行有效的规范的读操作,这属于自定义配置项的范畴,有空我会写一篇有关自定义配置项的文章。配置如下:

 <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler"/>
  </configSections>

 

然后,我们就可以在<configuration>节点下配置log4net的有关设置。很常,我们在配置自定义配置项时很郁闷,因为感觉vs好像不对自定义配置项智能提示。其实vs对xml文件的智能提示功能是通过xml的对应的架构文件xsd来实现的。我在网上找到一个log4net配置的xsd文件,在配置log4net时,只需要在菜单栏"XML"--"架构",把这个xsd文件添加进去,或者把它放到目录下C:\Program Files\Microsoft Visual Studio 9.0\xml\Schemas。

log4net.xsd文件下载地址,文件里面有版本声明。

现在,对log4net的配置也有了智能感知了。

简单的配置如下:

  <log4net>
    <root>
      <appender-ref  ref="myappender"/>
      <level value="INFO"/>
    </root>
    <appender name="myappender" type="log4net.Appender.FileAppender">
      <appendToFile value="true"/>
      <file value="mylog.txt"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="记录时间:%date 输出信息:%message。%newline"/>
      </layout>
    </appender>
  </log4net>

 

root配置项是用来配置日志的输出媒介和权限等级的。level对应的等级从高到低有debug,info,warn,error,fatal,logger的日志输出只对有效等级才有效。

            log4net.ILog log = log4net.LogManager.GetLogger("mylogger");
            log.Debug("Holle Log4net");
            log.Info("Holle Log4net");
            log.Warn("Holle Log4net");
            log.Error("Holle Log4net");
            log.Fatal("Holle Log4net");

 

           因为我们配置文件中配置的等级是info,所以我们没有权限执行log.Debug方法,故log.Debug("Holle Log4net")输出无结果,但是不报错,其他的则有权限输出。appender配置项中,type="log4net.Appender.FileAppender"指明日志输出为文件,它可以支持多种输出,这里就不谈论了,读者可以自行研究。appender节点下的layout是用来控制appender的输出格式的,而%后面代表的是变量,变量的含义如下:

Conversion Pattern Name
 Effect
 
a
 等价于appdomain
 
appdomain
 引发日志事件的应用程序域的友好名称。(我在使用中一般是可执行文件的名字。)
 
c
 等价于 logger
 
C
 等价于 type
 
class
 等价于 type
 
d
 等价于 date
 
date
 发生日志事件的本地时间。 使用 %utcdate 输出UTC时间。date后面还可以跟一个日期格式,用大括号括起来。例如:%date{HH:mm:ss,fff}或者%date{dd MMM yyyy HH:mm:ss,fff}。如果date后面什么也不跟,将使用ISO8601 格式 。

日期格式和.Net中DateTime类的ToString方法中使用的格式是一样。

另外log4net还有3个自己的格式Formatter。 它们是 "ABSOLUTE", "DATE"和"ISO8601"分别代表 AbsoluteTimeDateFormatter, DateTimeDateFormatter和Iso8601DateFormatter。例如: %date{ISO8601}或%date{ABSOLUTE}。

它们的性能要好于ToString。
 
exception
 异常信息

日志事件中必须存了一个异常对象,如果日志事件不包含没有异常对象,将什么也不输出。异常输出完毕后会跟一个换行。一般会在输出异常前加一个换行,并将异常放在最后。
 
F
 等价于 file
 
file
 发生日志请求的源代码文件的名字。

警告:只在调试的时候有效。调用本地信息会影响性能。
 
identity
 当前活动用户的名字(Principal.Identity.Name). 

警告:会影响性能。(我测试的时候%identity返回都是空的。)
 
l
 等价于 location
 
L
 等价于 line
 
location
 引发日志事件的方法(包括命名空间和类名),以及所在的源文件和行号。

警告:会影响性能。没有pdb文件的话,只有方法名,没有源文件名和行号。
 
level
 日志事件等级
 
line
 引发日志事件的行号

警告:会影响性能。
 
logger
 记录日志事件的Logger对象的名字。 

可以使用精度说明符控制Logger的名字的输出层级,默认输出全名。

注意,精度符的控制是从右开始的。例如:logger 名为 "a.b.c", 输出模型为 %logger{2} ,将输出"b.c"。 
 
m
 等价于 message
 
M
 等价于 method
 
message
 由应用程序提供给日志事件的消息。
 
mdc
 MDC (旧为:ThreadContext.Properties) 现在是事件属性的一部分。 保留它是为了兼容性,它等价于 property。
 
method
 发生日志请求的方法名(只有方法名而已)。

警告:会影响性能。
 
n
 等价于 newline
 
newline
 换行符
 
ndc
 NDC (nested diagnostic context)
 
p
 等价于 level
 
P
 等价于 property
 
properties
 等价于 property
 
property
 输出事件的特殊属性。例如: %property{user} 输出user属性。属性是由loggers或appenders添加到时间中的。 有一个默认的属性"log4net:HostName"总是会有。 

%property将输出所以的属性 。

(我除了知道可以用它获得主机名外,还不知道怎么用。)

 
 
r
 等价于 timestamp
 
t
 等价于 thread
 
timestamp
 从程序启动到事件发生所经过的毫秒数。
 
thread
 引发日志事件的线程,如果没有线程名就使用线程号。 
 
type
 引发日志请求的类的全名。.

可以使用精度控制符。例如: 类名是 "log4net.Layout.PatternLayout", 格式模型是 %type{1} 将输出"PatternLayout"。(也是从右开始的。)

警告:会影响性能。
 
u
 等价于 identity
 
username
 当前用户的WindowsIdentity。(类似:HostName\Username)

警告:会影响性能。
 
utcdate
 发生日志事件的UTC时间。后面还可以跟一个日期格式,用大括号括起来。例如:%utcdate{HH:mm:ss,fff}或者%utcdate{dd MMM yyyy HH:mm:ss,fff}。如果utcdate后面什么也不跟,将使用ISO8601 格式 。

日期格式和.Net中DateTime类的ToString方法中使用的格式是一样。

另外log4net还有3个自己的格式Formatter。 它们是 "ABSOLUTE", "DATE"和"ISO8601"分别代表 AbsoluteTimeDateFormatter, DateTimeDateFormatter和Iso8601DateFormatter。例如: %date{ISO8601}或%date{ABSOLUTE}。

它们的性能要好于ToString。
 
w
 等价于 username
 
x
 等价于 ndc
 
X
 等价于 mdc
 
%
 %%输出一个百分号
 

 

转义字符的修饰符:

Format modifier
 left justify
 minimum width
 maximum width
 comment
 
%20logger
 false
 20
 none
 如果logger名不足20个字符,就在左边补空格。
 
%-20logger
 true
 20
 none
 如果logger名不足20个字符,就在右边补空格。
 
%.30logger
 NA
 none
 30
 超过30个字符将截断。
 
%20.30logger
 false
 20
 30
 logger名要在20到30之间,少了在左边补空格,多了截断。
 
%-20.30logger
 true
 20
 30
 logger名要在20到30之间,少了在右边补空格,多了截断。
 

最后,要让配置文件的log4net配置生效,需要在名字空间下加上特性[assembly:log4net.Config.XmlConfigurator(Watch=true)]。

参考博客:http://www.cnblogs.com/jams742003/archive/2009/12/10/1620861.html

 


 

 

posted on 2012-05-11 16:14  liquorbin  阅读(287)  评论(0)    收藏  举报