注销

注销

  语源科技BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  112 随笔 :: 7 文章 :: 18 评论 :: 0 Trackbacks

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

 

%

输出一个 % 号


posted on 2006-12-19 10:02 注销..... 阅读(449) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: