Logger hierarchy(层次级别)

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

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

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

例子:A logger名称为“Foo.Bar”,B logger名称为“Foo.Bar.Baz”,AB的父级。名称为“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实例的输出方法实现。这些输出方法有DebugInfoWarnErrorFatal

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

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

简单规则:如果日志记录请求的LevelLlogger本身定义(或继承)LevelK,当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能接受的日志信息。

使用以下filterappender只接受LevelINFOFATAL之间的日志纪录请求。

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

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

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

</filter>

 

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

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

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

</filter>

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

第一个filter将会在日志纪录信息中查找“database”,如果找到则不再匹配下面得filterappener接受并纪录该日志。如果没有找到则继续使用第二个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

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

例如:转换模型“%-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

 

%

输出一个%

posted on 2010-12-24 14:41  第七影视|the7.tv  阅读(337)  评论(0编辑  收藏  举报
最新电影| 好看的电影| 好看的美剧| 第七影视| 迅雷下载