Log4net配置学习

王朝c#·作者佚名  2006-12-17
窄屏简体版  字體: |||超大  

Logger hierarchy(层次级别)

Logger都是已经命名的实体。Logger的名称区分大小写并遵循以下规则:

1 如果A logger的名称如果是B logger名称的前缀(通过“.”连接),则说A logger是B logger的祖父级。

2 如果A logger的名称和B logger的名称之间不存在其他的logger名称,则A logger是B logger的父级。

例子:A logger名称为“Foo.Bar”,B logger名称为“Foo.Bar.Baz”,A为B的父级。名称为“System”的logger是名称为“System.Text.StringBuilder”的祖父级。

Root logger位于logger层次级别中的顶级。它有例外的三条规则:

1 Root logger总是存在的。

2 Root logger不能通过名称或取。

3 Root logger 有一个默认的Level 值为 Debug。

Logger 可以通过log4net.LogManager类的静态方法GetLogger获取。

Level值:ALL/DEBUG/INFO/WARN/ERROR/FATAL/OFF

Level 继承规则:如果一个logger没有定义Level,它的Level值将从它的父级(定义了Level)继承。

日志纪录请求通过调用logger实例的输出方法实现。这些输出方法有Debug,Info,Warn,Error和Fatal。

通过定义,输出方法决定了日志纪录请求的Level。例如,log是一个logger实例,那么语句log.Info(“..”)的日志纪录请求Level为INFO。

如果日志纪录请求的Level比logger本身定义(或继承)的Level高,则请求是可行的,否则不可行。

简单规则:如果日志记录请求的Level为L,logger本身定义(或继承)Level为K,当L>=K时,日志纪录请求是可行的。

Level级别:DEBUG <INFO<WARN<ERROR<FATAL

通过名称,调用log4net.LogManager.GetLogger方法,可以获取同一个logger的实例引用。这样在配置了一个logger后,不用在代码中传递引用而可以获取同一个logger的引用了。与生物上的亲子关系(父亲总是先于孩子)基本相反,在log4net 里,logger可以被创建和配置成任何顺序。特别的是,一个父级logger可能比子级logger后实例化,但却可以在子级中查找到。

Appender

Log4net允许日志以不同的方式输出,如:ms sql、文件、控制台或者系统日志等等。

一个logger可以有多个Appender。每一个可行的日志纪录请求将输出到所有的appender,这些appender是在当前这个logger中引用的,还包括父级logger中引用的。换句话说,appender将在logger的层次级别中添加性的继承。例如在root中定义了一个Console appender,那么所有的logger至少有一个Console appender。如果 A logger有一个File appender,则 A logger以及它的子logger都有两个appender。

Additivity属性默认为true,当设置为false时,appender将采用覆盖的方式,而不再从父级logger中继承。

Filters是用来过滤appender能接受的日志信息。

使用以下filter的appender只接受Level从INFO到FATAL之间的日志纪录请求。

<filter type="log4net.Filter.LevelRangeFilter">

<param name="LevelMin" value="INFO" />

<param name="LevelMax" value="FATAL" />

</filter>

使用以下filter的appender只接受包含子串为“database”的日志纪录。

<filter type="log4net.Filter.StringMatchFilter">

<param name="StringToMatch" value="database" />

</filter>

<filter type="log4net.Filter.DenyAllFilter" />

第一个filter将会在日志纪录信息中查找“database”,如果找到则不再匹配下面得filter,appener接受并纪录该日志。如果没有找到则继续使用第二个filter,该filter将拒绝任何日志信息。

Layouts 用来定制输出格式。

加载配置

ConfigFile属性:当我们自己定义了一个log4net的配置文件时,可以通过这个属性来指定配置文件。

ConfigFileExtension属性:当应用程序会编译成不同扩展名称的程序集时,可以使用这个属性。如Sample程序将编译成Sample.exe,则ConfigFileExtension设置为“config”,那么所使用的配置文件名称为:Sample.exe.config。注意不能和ConfigFile属性同时使用。

Watch属性:在运行期间是否监测配置文件。当值为true时,FileSystemWatcher将用来监视配置文件的内容改变、重命名和删除通知。

为应用程序加载log4net的配置,可以通过在应用程序集中设置属性。

例如:

[assembly: log4net.Config.DOMConfigurator(ConfigFile="Sample.config")]

[assembly: log4net.Config.DOMConfigurator(ConfigFileExtension="config")]

也可以不使用任何参数,这时将使用应用程序的配置文件。

[assembly: log4net.Config.DOMConfigurator()]

另一种方式是在代码中使用 DOMConfigurator 类

log4net.Config.DOMConfigurator.Configure(

new FileInfo("TestLogger.Exe.Config"));

使用ConfigureAndWatch(..)可以指定一个配置文件并且监视该文件的变化。

PatternLayout

每一种指定的转换符号都以%开始,后面跟着一个可选的格式符号和一个转换符号。转换符号用来指定输出的数据类型,如Level,logger,date等。

例如:转换模型“%-5p [%t]: %m%n”

ILog log = LogManager.GetLogger(typeof(TestApp));

log.Debug("Message 1");

log.Warn("Message 2");

转换后:

DEBUG [main]: Message 1

WARN [main]: Message 2

“%-5p”表示输出日志纪录请求的Level值,宽度为5个子符,并左对齐。

转换符号列表:

a

输出创建日志的AppDomain的名称

c

默认输出logger的全名称。后面可跟“{数字}”,则表示输出与数字对应的logger名称级别(从右边开始)。如全名为“a.b.c”,“%c{2}”输出“b.c”

C

输出调用日志纪录请求的类名。后面可跟“{数字}”,表示输出与数字对应的类名称(包含命名空间,从右边开始)。

d

输出日志记录时间,后可跟“{时间格式}”。默认为yyyy-MM-dd HH:mm:ss,fff

F

输出调用日志纪录请求的文件全名。(会影响速度)

l

输出调用日志纪录请求的一些本地信息。如类和成员名,调用文件和调用声明的代码行数。(极其影响性能)

L

输出调用日志纪录请求的声明代码行数。(极其影响性能)

m

输出应用程序所要输出的信息。

M

输出调用日志纪录请求的成员名称。(极其影响性能)

n

输出换行符号

p

输出日志请求的Level值

P

r

输出从应用程序启动开始到日志纪录请求的时间(毫秒)

t

输出产生日志的线程名称,如果没有名称则输出线程的编号

u

输出当前活动用户的名称。(Principal.Identity.Name)

W

输出当前活动用户的windows标识。

x

X

%

输出一个%号

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航