-
---------
只为成功找方法,不为失败找借口,最成功的人,是
最重视找方法的人。
--------
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
==== ======================
===================================
log4net
使用手册
1
简介
1.1Log4net
的优点:
几乎所有的大型应用都会有自己的用于跟踪调试的
API
。
因为一旦程序被部署以后,
就不太
可能再利用专门的调试工具了。
然而一个管理
员可能需要有一套强大的日志系统来诊断和修
复配置上的问题。
经验表明,
日志记录往往是软件开发周期中的重要组成部分。
它具有以下几个优点:
它可以
提供应用程序运行时的精确环境,
可供开发人
员尽快找到应用程序中的
Bug
;
一旦
在程序中
加入了
Log
输出代码,程
序运行过程中就能生成并输出日志信息而无需人工干预。另外,
日志信息可以输出到不同
的地方(控制台,文件等)以备以后研究之用。
Log4net
就是为这样一个目的
设计的,用于
.NET
开发环境的日志记录包。
1.2Log4net
的安装:
用户可以从
/log4net/
下载
log4net
的源代码。解压软件包后,在解压
的
src
目录下将
载入
Visual
Studio .NET
,编译后可以得到
。用户要在
自己的程序里加入日志功能,只需将
引入工程即可。
2
Log4net
的结构
log4net
有四种主要的组件
,
分别是
Logger
(记录器)
p>
, Repository
(库)
,
Appender
(附着器)
以及
Layout
(布局)
.
2.1Logger
2.1.1
Logger
接口
Logger
是应用程序需要交互的主要组件,它用来产生日志消息。产生的日志消息并不直接
显
示,还要预先经过
Layout
的格式化处理后才会输出。
p>
Logge
r
提供了多种方式来记录一个日志消息,你可以在你的应用程序里创建多个
Logger
,
每个实例化的
Logger
对象都被
log4net
框架作为命名实体
(named entity)
来维护。<
/p>
这意味着为
了重用
Logger
对象,你不必将它在不同的类或对象间传递,只需要用它的名字为参数调用
就可以了。
log4net
框架使用继承体系,继承体系类似
于
.NET
中的名字空间。也就是说,如
果有两个
logger,
分别被定义为
a.b.c
和
a.b
,那么我们说<
/p>
a.b
是
a.b.c
的祖先。每一个
logger
都继承了祖先的属性
Log4net
框架定义了一个
ILog
接口,所有的
logger
类都必须实现这个接口。如果你想实现
一个自定义的
logger
,你必须首先实现这个
接口。你可以参考在
/extension
目录下的几个例
p>
☆☆☆☆☆☆☆☆可以编辑的
WORD
文档
★知识成就未来☆☆☆☆☆☆☆☆
---------
只为成功找方法,不为失败找借口,最成功的人,是最重视找方法的人。
--------
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
==== ======================
===================================
子。
ILog
接口的定义如下:
Log4net
框架定义了一个叫做
LogMa
nager
的类,用来管理所有的
logger
对象。它有一个
GetLogger()
静态方法,用
我们提供的名字参数来检索已经存在的
Logger
对象。
p>
如果框架里不存在该
Logger
对象,<
/p>
它也会为我们创建一个
Logger
对象
。
代码
如下所示:
1public interface ILog
2{
3
void Debug(object message);
4
void Info(object message);
5
void Warn(object message);
6
void Error(object message);
7
void Fatal(object message);
8//
以上的每一个方法都有一个重
载的方法,用来支持异常处理。
9//
每一个重载方法都如下所示,有一个异常类型的附加参数
。
10
void Debug(object message,
Exception ex);
11
//
12
//Boolean
属性用来检查
L
ogger
的日志级别
13
/
/
(我们马上会在后面看到日志级别)
14
bool isDebugEnabled;
15
bool
isInfoEnabled;
16
//
…
<
/p>
其他方法对应的
Boolean
属性
p>
17}
18
19
log =
ger(
通常来说,我们会以类(
class
)的类型(
type
)为参数来调用
GetLogger()
,以
便跟踪我们正
在进行日志记录的类。
传递的类
< br>(class)
的类型
(type)
可以用
typeof(Classname)
方法来获得,
或
者可以用如下的反射方法来获得:
rentMethod().DeclaringType
尽管符号长了一些,
但是后者可以用
于一些场合,
比如获取调用方法的类
(class)
的类型
(type)
。
2.1.2
日志的级别
正如你在
ILog
的接口中看到的一样,有五种不同的方法可以跟踪一个应用程序。事实上,
p>
这五种方法是运作在
Logger
对象设置
的不同日志优先级别上。这几种不同的级别是作为常
量定义在
<
/p>
类中。你可以在程序中使用任何一种方法。但是在最后的发布中
☆
☆☆☆☆☆☆☆可以编辑的
WORD
文档★知识成就未来☆☆☆
☆☆☆☆☆
---------
只为
成功找方法,不为失败找借口,最成功的人,是最重视找方法的人。
--------
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
==== ======================
===================================
你也许不想让所有的代码来浪费你的
CPU
周
期,
因此,
框架提供了
7
种级别和相应的
Boolean
属性来控制日志记录
的类型。
Level
有以下几种取值
级别
允许的方法
Boolean
属性
优先级别
OFF
Highest
FATAL
void
Fatal(...);
bool IsFatalEnabled;
RROR
void Error(...);
bool IsErrorEnabled;
WARN
void Warn(...);
bool IsWarnEnabled;
INFO
void Info(...);
bool IsInfoEnabled;
DEBUG
void Debug(...);
bool
IsDebugEnabled;
ALL
Lowest
表
1
Logger
的日志级别
在
log4net
< br>框架里,通过设置配置文件,每个日志对象都被分配了一个日志优先级别。如果
没
有给一个日志对象显式地分配一个级别,那么该对象会试图从他的祖先继承一个级别值。
ILog
接口的每个方法都有一个预先定义好了的级别值。
正如你在表
1
看到的,
ILog
的
< br>Inof()
方法具有
INFO
级别。同样的,以此类推,
Error()
方法具有
ERROR
级别。当我们使用以上
的任何一种方法
时,
log4net
框架会检查日志对象
logger
的级别和方法的级别。只有当方法
的级别高于日
志级别时,日志请求才会被接受并执行。
举例说明,当你创建了一个日志对象,并且把他的级别设置为
INFO
。于是框架会设置日志
的每个
Boolean
属性。当你调用相应的日志方法时,框架会检查
相应的
Boolean
属性,以决
定该
方法能不能执行。如下的代码:
(
(
(
☆☆☆☆☆☆☆☆可以编辑的
p>
WORD
文档★知识成就未来☆☆☆☆☆☆☆☆
---------
只为成功找方法,不为失败找借口,
最成功的人,是最重视找方法的人。
--------
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
==== ======================
===================================
对于第一种方法,
Info()
p>
的级别等与日志的级别(
INFO
)
,因此日志请求会被传递,我们可
以得到输出结果”
< br>message
”
。
对于第二种方法,
Debug()
的级别低于日志对象
logger
p>
的日志级别
(INFO)
,因此,日志请求
被拒绝了,我们得不到任何输出。同样的,针对第三行语句,我们可以很容易得出结论。
在表<
/p>
1
中有两个特殊的级别:
ALL
和
OFF
。
ALL
p>
表示允许所有的日志请求。
OFF
是拒绝所
有的请求。
你也可以显式地检查
Logger<
/p>
对象的
Boolean
属性,如下所示:
if (gEnabled)
{
(
}
2.2Repository
<
/p>
Repository
主要用于负责日志对象组织结构的维护。在
log4net
的以前版本中,框架仅支持
分等级的组织结构
(hierarchical organization)
p>
。这种等级结构本质上是库的一个实现,并且定
义
< br>在
chy
名
字
空
间
中
。
要
实
现
一
个
Repository
,
需
要
实
现
rReposi
tory
接
口
。但
< br>是通
常并
不是
直接实
现该接
口,
而是
以
RepositorySkeleton
为基类继承。体系库
(hierarchical
repository
)
则
由
chy
类实现。
如果你是个
log4net
框架的使用者,而非扩展者,那么你几乎不会在你的代码里用到
Repository
的类。相反的,你需要用到
LogManager
类来自动管理库和日志对象。
2.3Appender
一个好的日志框架应该能够产生多
目的地的输出。
比如说输出到控制台或保存到一个日志文
件。<
/p>
log4net
能够很好的满足这些要求。它使用一个叫做
p>
Appender
的组件来定义输出介质。
正如名字所示,这些组件把它们附加到
Logger
日志组件上
并将输出传递到输出流中。你可
以把多个
Appender
p>
组件附加到一个日志对象上。
Log4n
et
框架提供了几个
Appender
组件。
关于
log4net
提供的
p>
Appender
组件的完整列表可以在
l
og4net
框架的帮助手册中找到。有了
这些现成的
Appender
组件,一般来说你没有必要再自己编写了。但是如果你
愿意,可以从
erSkeleton
类继承。
< br>
2.4Appender Filters
一个
Appender
对象缺省地将所有的日志事件传递到输出流。
Appender
的过滤器
(Appender
Filters)
可以按照不同的标准过滤日志事件。在
的名字空间下已经有几个预定
义的过滤器。
使用这些过滤器,<
/p>
你可以按照日志级别范围过滤日志事件,
或者按照某个特殊
的字符串进行过滤。你可以在
API
的帮助文
件中发现更多关于过滤器的信息。
☆☆☆☆☆☆☆☆可以编辑的
WORD
文档★知识成就未来☆☆
☆☆☆☆☆☆
---------
只
为成功找方法,不为失败找借口,最成功的人,是最重视找方法的人。
--------
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
==== ======================
===================================
2.5Layout
Layout
组件用于向用户显示
最后经过格式化的输出信息。输出信息可以以多种格式显示,
主要依赖于我们采用的
p>
Layout
组件类型。可以是线性的或一个
XML
文件。
Layout
组件和<
/p>
一个
Appender
组件一起工作。<
/p>
API
帮助手册中有关于不同
Layou
t
组件的列表。
一个
Appender
对
象
,
只
p>
能
对
应
一
个
Layout
对
象<
/p>
。
要
实
现
你
自
己
的
Layout
类
,
你
p>
需
要
从
Skele
ton
类继承,它实现了
ILayout
接口。
3
在程序中使用
log4net
在开始对你的程序进行日志记录前
,需要先启动
log4net
引擎。这意味着你需要先配置前面
提到的三种组件。
你可以用两种方法来设定配置:
在单独的文件中设定配置或在代码中定义
配置。
因为下面几种原因,推荐在一个单独的文件中定义配置:
l
你不需要重新编译源代码就能改变配置;
2
你可
以在程序正运行的时候就改变配置。
这一点在一些
WEB
程序和远程过程调用的程序
中有时很重要;
考虑到第一种方法的重要性,我们
先看看怎样在文件中设定配置信息。
3.1
定义配置文件
配置信息可以放在如下几种形式文件的一种中。
在程序的配置文件里,如
或
.
<
/p>
在你自己的文件里。文件名可以是任何你想要的名字,如
等
.
log4net
框架会在相对于
rectory
属性定义的目录路径下查
找配置文件。框架在配置文件里要查找
的唯一标识是
标签。一个完整的配置文件<
/p>
的例子如下:
1
2
3
4
5type=
6
log4net-
net-1.0
7
☆☆☆☆☆☆☆☆可
以编辑的
WORD
文档★知识成就未来☆☆☆☆☆☆☆☆
---------
只为成功找方法,不为
失败找借口,最成功的人,是最重视找方法的人。
--------
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
==== ======================
===================================
8
9
10
11
12
13
14
15
16
17
18
type=
19
20
21
22
23
24
25
value=
26
/>
27
28
29
30
31
32
33
34
type=
35
36
37
value=
38
/>
39
40
41
42
43
44
你可以直接将上面的文本
拷贝到任何程序中使用,
但是最好还是能够理解配置文件是怎样构
成的。
只有当你需要在应用程序配置文件中使用
log4net
配置时,才需要在
标签中加入
配置节点入口。对于其他的单独文件,只有
标签内的文本才
是必需的,这些标签的顺序并不是固定的。下面我们依次讲解
各个标签内文本的含义:
3.1.1
在框架的体系里,所有的日志对象都是根日志
(root
logger)
的后代。
因此如果一
个日志对象
☆☆☆☆☆☆☆☆可以编辑的
WORD
文档★知识成就未来☆☆☆☆☆☆☆☆
-
-
-
-
-
-
-
-
-
上一篇:Nxlog日志采集配置手册
下一篇:固体力学英语词汇翻译