在开始使用log4net之前,你需要加热你的log4net引擎。呵呵,技术上就是配置前面说过的三个组件:
Logger,Appender,Layout。有两种配置方式,一个是通过配置文件,另一个就是在程序代码中配置。
log4net的帮助文件推荐使用配置文件配置log4net。有两个理由:
1、你能随时修改配置而无需编译程序;
2、你能在运行时修改配置,这对于Web应用程序和远程通讯程序非常重要。
使用配置文件
log4net框架会尝试在应用程序的BaseDirectory指向的目录中查找配置文件,即在AppDomain.CurrentDomain.BaseDirectory的位置上查找。而log4net查找的唯一目标就是在配置文件中的<log4net>标志出的XML内容。
一个完整的配置文件如下:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net"
type="log4net.Config.Log4NetConfigurationSectionHandler,
log4net-net-1.0"
/>
</configSections>
<log4net>
<logger name="testApp.Logging">
<level value="DEBUG"/>
</logger>
<root>
<level value="WARN" />
<appender-ref ref="LogFileAppender" />
<appender-ref ref="ConsoleAppender" />
</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="Header" value="[Header] "/>
<param name="Footer" value="[Footer] "/>
<param name="ConversionPattern"
value="%d [%t] %-5p %c [%x] <%X{auth}> - %m%n"
/>
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="DEBUG" />
<param name="LevelMax" value="WARN" />
</filter>
</appender>
<appender name="ConsoleAppender"
type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern"
value="%d [%t] %-5p %c [%x] <%X{auth}> - %m%n"
/>
</layout>
</appender>
</log4net>
</configuration>
你可以直接把上面的配置文件复制到XML文件中,直接作为你的应用的配置文件。不过,我们还是需要多了解一些那些东西构成了配置文件。
/configuration/configSection/section 这个项有点特殊,如果你使用的是.net的应用配置文件,那么这个项必须出现,如果你使用的自定义的配置文件,那么这个项可以是不要的,自定义的配置文件只需要<log4net>这个项。
接下来看看/configuration/log4net这个项,这个是最主要的,也就是log4net框架要寻找的东西。
<logger>
正如前面的文章所说的,这里配置的正是Logger所需要的东西。
@name:
从上面的配置中可以看出logger[@name]="testApp.Loggin",那么在程序中通过调用LogManager.GetLogger("testApp.Loggin")可以在任何地方得到同一个Logger。
logger/level[@value]:
logger/level[@value]="DEBUG"说明Logger的Level是DEBUG。
logger/appender-ref[@ref]="LogFileAppender"以及logger/appender-ref[@ref]="ConsoleAppender":
这两个项正如前面的文章所说的,一个Logger可以有多个Appender用于将消息输出到不同的地方。这里appender-ref表明Logger引用下面配置的Appender。
<root>
我们知道,Logger是通过类似命名空间的层次结构命名和管理的,也如前面的文章所说,每一个应用中的Logger都有一个Root Logger,也就是默认Logger,<root>项就是用于定义Root Logger的。但是,<root>项并不是必须的,因为<root>项只有在配置文件中没有配置任何Logger的时候才起作用,此时,log4net将使用<root>项的配置作为创建一个Logger时的默认配置。所以,在这个例子里,因为上面已经配置了<logger>,所以<root>并不起作用,放在这里只是为了做一个完整的配置说明。
但是,需要注意的是,<root>并非完全不起作用。如果我们在代码中使用了LogManager.GetLog(...),其中的参数指定了一个不在配置文件中的Logger的@name时,那么log4net将会把<root>作为默认Logger,并依据<root>的配置创建一个Logger。
<appender>
前面<logger>或<root>所引用的appender-ref将配置在这里。
@name:
指定了Appender的名称。
@type
指定了Appender的类的全名。这里使用的log4net提供的log4net.Appender.FileAppender。
<appender>下面的参数,不同的Appender使用不同的参数,这些参数可以在log4net的帮助文档中找到,这里就不多说了。下面就是log4net的组件层的最后一层Layout。
<layout>
如前所说,layout定义了输出风格。这里使用了log4net提供的layout组件:log4net.Layout.PatternLayout,这个值由@type指定。同样的,不同的layout也有不同的参数,这些都需要做一些设定,关于layout的参数,在Log4net的配置文件中也有说明,这里也不多说了。
Appender Filter
不过,到这里配置文件还没有结束,我们还需要为Appender Filter做一些配置。
Appender Filter定义了那些消息才需要输出到layout。这个例子中,定义了在最大值WARN和最小值DEBUG之间的消息才会被传递到layout。关于不同的Filter,在帮助文档中都可以找到。
浙公网安备 33010602011771号