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
1<info<warn<error<fatal <filter="" a="" additivity="" appender="" console="" false="" fatal="" file="" filter="" filters="" info="" level="" log4net="" log4net.logmanager.getlogger="" logger="" ms="" root="" sql="" true="" type="log4net.Filter.LevelRangeFilter" 、文件、控制台或者系统日志等等。="" 。="" 。如果="" 。每一个可行的日志纪录请求将输出到所有的="" 一个="" 中定义了一个="" 中引用的。换句话说,="" 中引用的,还包括父级="" 中继承。="" 之间的日志纪录请求。="" 从="" 以及它的子="" 使用以下="" 允许日志以不同的方式输出,如:="" 到="" 只接受="" 可以有多个="" 可以被创建和配置成任何顺序。特别的是,一个父级="" 可能比子级="" 后实例化,但却可以在子级中查找到。="" 后,不用在代码中传递引用而可以获取同一个="" 将在="" 将采用覆盖的方式,而不再从父级="" 属性默认为="" 方法,可以获取同一个="" 时,="" 是在当前这个="" 是用来过滤="" 有一个="" 的="" 的实例引用。这样在配置了一个="" 的层次级别中添加性的继承。例如在="" 的引用了。与生物上的亲子关系(父亲总是先于孩子)基本相反,在="" 能接受的日志信息。="" 至少有一个="" 通过名称,调用="" 都有两个="" 里,="" ,则="" ,当设置为="" ,这些="" ,那么所有的="">
2<param name="LevelMin" value="INFO"/>
3<param name="LevelMax" value="FATAL"/>
4
5
6使用以下 filter 的 appender 只接受包含子串为“ database ”的日志纪录。
7
8<filter type="log4net.Filter.StringMatchFilter">
9<param name="StringToMatch" value="database"/>
10</filter>
11<filter type="log4net.Filter.DenyAllFilter"></filter>
12
13第一个 filter 将会在日志纪录信息中查找“ database ”,如果找到则不再匹配下面得 filter , appener 接受并纪录该日志。如果没有找到则继续使用第二个 filter ,该 filter 将拒绝任何日志信息。
14
15Layouts 用来定制输出格式。
16
17加载配置
18
19ConfigFile 属性:当我们自己定义了一个 log4net 的配置文件时,可以通过这个属性来指定配置文件。
20
21ConfigFileExtension 属性:当应用程序会编译成不同扩展名称的程序集时,可以使用这个属性。如 Sample 程序将编译成 Sample.exe ,则 ConfigFileExtension 设置为“ config ”,那么所使用的配置文件名称为: Sample.exe.config 。注意不能和 ConfigFile 属性同时使用。
22
23Watch 属性:在运行期间是否监测配置文件。当值为 true 时, FileSystemWatcher 将用来监视配置文件的内容改变、重命名和删除通知。
24
25为应用程序加载 log4net 的配置,可以通过在应用程序集中设置属性。
26
27例如:
28
29[assembly: log4net.Config.DOMConfigurator(ConfigFile="Sample.config")]
30
31[assembly: log4net.Config.DOMConfigurator(ConfigFileExtension="config")]
32
33也可以不使用任何参数,这时将使用应用程序的配置文件。
34
35[assembly: log4net.Config.DOMConfigurator()]
36
37另一种方式是在代码中使用 DOMConfigurator 类
38
39` log4net.Config.DOMConfigurator.Configure( `
40
41` new FileInfo("TestLogger.Exe.Config")); `
42
43使用 ConfigureAndWatch(..) 可以指定一个配置文件并且监视该文件的变化。 ` `
44
45
46 ****
47
48PatternLayout
49
50每一种指定的转换符号都以 % 开始,后面跟着一个可选的格式符号和一个转换符号。转换符号用来指定输出的数据类型,如 Level , logger , date 等。
51
52例如:转换模型“ %-5p [%t]: %m%n ”
53
54ILog log = LogManager.GetLogger(typeof(TestApp));
55
56log.Debug("Message 1");
57
58log.Warn("Message 2");
59
60转换后:
61
62DEBUG [main]: Message 1
63
64WARN [main]: Message 2
65
66“ %-5p ”表示输出日志纪录请求的 Level 值,宽度为 5 个子符,并左对齐。
67
68转换符号列表:
69
70a
71
72|
73
74输出创建日志的 AppDomain 的名称
75
76---|---
77
78c
79
80|
81
82默认输出 logger 的全名称。后面可跟“ { 数字 } ”,则表示输出与数字对应的 logger 名称级别(从右边开始)。如全名为“ a.b.c ”,“ %c{2} ”输出“ b.c ”
83
84C
85
86|
87
88输出调用日志纪录请求的类名。后面可跟“ { 数字 } ”,表示输出与数字对应的类名称(包含命名空间,从右边开始)。
89
90d
91
92|
93
94输出日志记录时间,后可跟“ { 时间格式 } ”。默认为 yyyy-MM-dd HH:mm:ss,fff
95
96F
97
98|
99
100输出调用日志纪录请求的文件全名。(会影响速度)
101
102l
103
104|
105
106输出调用日志纪录请求的一些本地信息。如类和成员名,调用文件和调用声明的代码行数。(极其影响性能)
107
108L
109
110|
111
112输出调用日志纪录请求的声明代码行数。(极其影响性能)
113
114m
115
116|
117
118输出应用程序所要输出的信息。
119
120M
121
122|
123
124输出调用日志纪录请求的成员名称。(极其影响性能)
125
126n
127
128|
129
130输出换行符号
131
132p
133
134|
135
136输出日志请求的 Level 值
137
138P
139
140|
141
142r
143
144|
145
146输出从应用程序启动开始到日志纪录请求的时间(毫秒)
147
148t
149
150|
151
152输出产生日志的线程名称,如果没有名称则输出线程的编号
153
154u
155
156|
157
158输出当前活动用户的名称。( Principal.Identity.Name )
159
160W
161
162|
163
164输出当前活动用户的 windows 标识。
165
166x
167
168|
169
170X
171
172|
173
174%
175
176|
177
178输出一个 % 号</info<warn<error<fatal>