关键词不能为空

当前您在: 主页 > 英语 >

log4net使用文档,配置说明

作者:高考题库网
来源:https://www.bjmy2z.cn/gaokao
2021-02-17 23:40
tags:

-

2021年2月17日发(作者:武装)


log4net


使用手册




1


简介





1.1Log4net


的优点:




几乎所有的大型应用都会有自己的用于跟踪调试的

< p>
API



因为一旦程序被部署以后,


就不太


可能再利用专门的调试工具了。


然而一个管理 员可能需要有一套强大的日志系统来诊断和修


复配置上的问题。





经验表明,


日志记录往往是软件开发周期中的重要组成部分。


它具有以下几个优点:


它可以


提供应用程序运行时的精确环境,


可供开发人 员尽快找到应用程序中的


Bug



一旦 在程序中


加入了


Log


输出代码,程 序运行过程中就能生成并输出日志信息而无需人工干预。另外,


日志信息可以输出到不同 的地方(控制台,文件等)以备以后研究之用。





Log4net


就是为这样一个目的 设计的,用于


.NET


开发环境的日志记录包。





1.2Log4net


的安装:





用户可以从


/log4net/


下载


log4net

的源代码。解压软件包后,在解压



src


目录下将



载入


Visual


Studio .NET


,编译后可以得到


。用户要在


自己的程序里加入日志功能,只需将

< p>


引入工程即可。






2 Log4net


的结构





log4net


有四种主要的组件 ,


分别是


Logger


(记录器)


, Repository


(库)


, Appender


(附着器)


以及



Layout


(布局)


.




2.1Logger




2.1.1






Logger


接口





Logger

是应用程序需要交互的主要组件,它用来产生日志消息。产生的日志消息并不直接


显 示,还要预先经过


Layout


的格式化处理后才会输出。





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


类都必须实现这个接口。如果你想实现

< p>
一个自定义的


logger


,你必须首先实现这个 接口。你可以参考在


/extension


目录下的几个例


子。






ILog


接口的定义如下:



Log4net


框架定义了一个叫做


LogMa nager


的类,用来管理所有的


logger


对象。它有一个


GetLogger()


静态方法,用 我们提供的名字参数来检索已经存在的


Logger


对象。


如果框架里不存在该


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


属性




17}



18


19


log = ger(




通常来说,我们会以类(


class


)的类型(


type


)为参数来调用


GetLogger()


,以 便跟踪我们正


在进行日志记录的类。


传递的类

< br>(class)


的类型


(type)

可以用


typeof(Classname)


方法来获得,



者可以用如下的反射方法来获得:





rentMethod().DeclaringType




尽管符号长了一些,


但是后者可以用 于一些场合,


比如获取调用方法的类


(class)

< p>
的类型


(type)







2.1.2






日志的级别






正如你在


ILog


的接口中看到的一样,有五种不同的方法可以跟踪一个应用程序。事实上,


这五种方法是运作在


Logger


对象设置 的不同日志优先级别上。这几种不同的级别是作为常


量定义在


< /p>


类中。你可以在程序中使用任何一种方法。但是在最后的发布中


你 也许不想让所有的代码来浪费你的


CPU


周期,


因此,


框架提供了


7


种级别和 相应的


Boolean


属性来控制日志记录的类型。

< p>




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()


方法具有

< p>
ERROR


级别。当我们使用以上


的任何一种方法 时,


log4net


框架会检查日志对象


logger


的级别和方法的级别。只有当方法


的级别高于日 志级别时,日志请求才会被接受并执行。





举例说明,当你创建了一个日志对象,并且把他的级别设置为


INFO


。于是框架会设置日志


的每个


Boolean


属性。当你调用相应的日志方法时,框架会检查 相应的


Boolean


属性,以决


定该 方法能不能执行。如下的代码:




(



(



(




对于第 一种方法,


Info()


的级别等与日志的级别(


INFO



,因此日志请求会被传递,我们可


以得到输出结果”


message







对于第二种方法,


Debug()


的级别低于日志对 象


logger


的日志级别


(INFO )


,因此,日志请求


被拒绝了,我们得不到任何输出。同样的, 针对第三行语句,我们可以很容易得出结论。





在表


1


中有 两个特殊的级别:


ALL



OFF



ALL


表示允许所有的日志请求。


OFF


是拒绝所


有的请求。

< br>




你也可以显式地检查


Logger


对象的


Boolean


属性,如下所示:




if (gEnabled)



{






(



}





2.2Repository




Repository

< p>
主要用于负责日志对象组织结构的维护。在


log4net


的以前版本中,框架仅支持


分等级的组织结构


(hie rarchical organization)


。这种等级结构本质上是库的一个实 现,并且定




chy





< br>中








Repository





< p>


rRepository


< br>口


。但


是通


常并


不是


直接实


现该接


口,


而是



RepositorySkeleto n


为基类继承。体系库



(hierarchical


repository


)




chy


类实现。





如果你是个


log4net


框架的使用者, 而非扩展者,那么你几乎不会在你的代码里用到


Repository

< br>的类。相反的,你需要用到


LogManager


类来自 动管理库和日志对象。





2.3Appender




一个好的日志框架应该能够产生多目的地的输出。


比如说输出到控制台 或保存到一个日志文


件。


log4net

能够很好的满足这些要求。它使用一个叫做


Appender


的组件来定义输出介质。


正如名字所示,这些组件把它们附加到


Logger


日志组件上并将输出传递到输出流中。你可


以把 多个


Appender


组件附加到一个日志对象上。

< p>


Log4net


框架提供了几个


Appender


组件。


关于


log4net


提供的


Appender


组件的完整列表可以在


log4net


框架的帮助手册中找到 。有了


这些现成的


Appender


组 件,一般来说你没有必要再自己编写了。但是如果你愿意,可以从


erSkeleton


类继承。






2.4Appender Filters




一个


Appender


对象缺省地将 所有的日志事件传递到输出流。


Appender


的过滤器


(Appender


Filters)


可以按照不同的标准过滤日志事件。在



的名字空间下已经有几个 预定


义的过滤器。


使用这些过滤器,


你 可以按照日志级别范围过滤日志事件,


或者按照某个特殊


的字符 串进行过滤。你可以在


API


的帮助文件中发现更多关于过滤器 的信息。





2.5Layout




Layout


组件用于向用户显示最后经过格式化的输出信息 。输出信息可以以多种格式显示,


主要依赖于我们采用的


Lay out


组件类型。可以是线性的或一个


XML

< br>文件。


Layout


组件和


一个


Appender


组件一起工作。


AP I


帮助手册中有关于不同


Layout


组件的列表。


一个


Appender











Layout




。< /p>









Layout








Skeleton

类继承,它实现了


ILayout


接口。

< br>




3


在程序中使用


log4net




在开始对你的程序进行日志记录前,需要先启动


log4net


引擎。这意味着你需要先配置前面


提 到的三种组件。


你可以用两种方法来设定配置:


在单独的文件中 设定配置或在代码中定义


配置。





因为下面几种原因,推荐在一个单独的文件中定义配置:





l


你不需要重新编译源代码就能改变配置;





2


你可 以在程序正运行的时候就改变配置。


这一点在一些


WEB


程序和远程过程调用的程序


中有时很重要;





考虑到第一种方法的重要性,我们 先看看怎样在文件中设定配置信息。





3.1


定义配置文件





配置信息可以放在如下几种形式文件的一种中。





在程序的配置文件里,如




.



< /p>


在你自己的文件里。文件名可以是任何你想要的名字,如




.



< p>
log4net


框架会在相对于


rectory


属性定义的目录路径下查


找配置文件。框架在配置文件里要查找 的唯一标识是



标签。一个完整的配置文件< /p>


的例子如下:







1




2




3




4








5type=




6



log4net- net-1.0




7




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


你可以直接将上面的文本 拷贝到任何程序中使用,


但是最好还是能够理解配置文件是怎样构


成的。



只有当你需要在应用程序配置文件中使用

< p>
log4net


配置时,才需要在



标签中加入



配置节点入口。对于其他的单独文件,只有



标签内的文本才


是必需的,这些标签的顺序并不是固定的。下面我们依次讲解 各个标签内文本的含义:





3.1.1








在框架的体系里,所有的日志对象都是根日志


(root logger)


的后代。



因此如果一 个日志对象


没有在配置文件里显式定义,则框架使用根日志中定义的属性。在

< p>


标签里,可以定义


level


级别值和


Appender


的列表。


如果没有定义


LEVEL


的值,


则缺省为


DEBUG



可以通 过



标签定义日志对象使用的


Appender


对象。



声明了在其他地方定


义的


Appender


对象的一个引用。在一个


logger


对象中的设置会覆盖根日志的设置。而对


Appender

< p>
属性来说,子日志对象则会继承父日志对象的


Appender

< p>
列表。这种缺省的行为方


式也可以通过显式地设定



标签的


additivity


属性为


false


而改变。




Additivity


的值缺省是< /p>


true.


















1



2



3


3.1.2













< br>了




















ger(



g



)


函数,你可以 检索具有该名字的日志。如果


ger(


?


)


打开的不是预定义的日志对象,则该日志对象会继承根日志对象

的属性。知道了这一点,我们可以说,其实



标签并不是必须的。




3.1.3











标签或单个的



标签里的

< br>Appender


对象可以用



标签定义。



标签的基 本形式如上面所示。它定义了


appender


的名字和类型。



另外比较重要


的是

< br>


标签内部的其他标签。不同的


ap pender


有不同的



标签。在这里,为


了使用


FileAppender,


你需要一个文件名作为参数。


另外还需要一个在



标签内部定


义一个


Layout


对象。


Layout


对 象定义在它自己的



标签内。

< br>


标签的


type


属性


定义了


Layout


的类型


(


在本例里是


PatternLayout )



同时也确定了需要提供的参数值。


Header



Footer


标签提供 了一个日志会话


(logging


session)


开始和结束时输出的文字。有关每种


appender

< br>的具体配置的例子,可以在



中得


到。





1



2



3


4 1




2type=




3




4




5




6








7








8






-


-


-


-


-


-


-


-



本文更新与2021-02-17 23:40,由作者提供,不代表本网站立场,转载请注明出处:https://www.bjmy2z.cn/gaokao/663693.html

log4net使用文档,配置说明的相关文章

  • 爱心与尊严的高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊严高中作文题库

    1.关于爱心和尊严的作文八百字 我们不必怀疑富翁的捐助,毕竟普施爱心,善莫大焉,它是一 种美;我们也不必指责苛求受捐者的冷漠的拒绝,因为人总是有尊 严的,这也是一种美。

    小学作文
  • 爱心与尊重的作文题库

    1.作文关爱与尊重议论文 如果说没有爱就没有教育的话,那么离开了尊重同样也谈不上教育。 因为每一位孩子都渴望得到他人的尊重,尤其是教师的尊重。可是在现实生活中,不时会有

    小学作文
  • 爱心责任100字作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任心的作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文
  • 爱心责任作文题库

    1.有关爱心,坚持,责任的作文题库各三个 一则150字左右 (要事例) “胜不骄,败不馁”这句话我常听外婆说起。 这句名言的意思是说胜利了抄不骄傲,失败了不气馁。我真正体会到它

    小学作文