LOG4NET配置学习

LOG4NET配置学习

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

 

%

输出一个 %


你可能感兴趣的:(LOG4NET配置学习)