码迷,mamicode.com
首页 > Web开发 > 详细

【Z13区】《Log4net写出适合自己的日志类》第二篇【没有理论的实践是盲目】

时间:2015-08-04 13:02:20      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

第一篇中,已经真刀实枪用log4net干过了一次。也是希望大家能先感受到什么是log4net。但是只没有理论的实践肯定是盲目的,所以这一篇,

咱们好好谈谈log4net的配置等其他信息


log4net来源

    log4net是Apache软件基金会Apache Logging Services工程的一部分。Apache日志服务工程致力于为程序调试和审计提供跨语言的日志服务。

详细说明,源码下载 可以参考官网:http://logging.apache.org/log4net/   

Apache Logging Services工程其他项目:http://logging.apache.org/ 

log4net能干哪些活?

    一个项目无论多么nb,要是我们用不着,那基本和我们无关。所以你要用它之前,得知道他能干哪些活。

首先log4net是用来写日志的。主要特性如下:

  • log4net 可实现速度优化。
  • log4net 基于已命名日志记录器层次结构。
  • log4net 是失败即停,但没有依懒性。
  • log4net 是线程安全的。
  • log4net 并不限于一组预定义的设施。可以在运行时使用一个配置文件设置日志记录行为。配置文件是 XML 格式。
  • log4net 被设计来处理从一开始的异常。
  • log4net 可以其输出定向到许多汇包括: 文件、 控制台、 windows事件日志或电子邮件。
  • log4net 分类分为级别的日志记录: DEBUG, INFO, WARN, ERROR and FATAL.。
    日志输出的格式可以通过实现一个新的布局类很容易改变。 通过编写一个新的附加类可改变的日志输出,以及写作策略目标。
  • log4net 支持多个输出附加目的地每记录器。

 

主要作用我已经标记背景色,它还可以将日志输出到数据库中【Sqlserver、Access, Oracle、DB2,SQLite】

以上的特性和log4net日志能输出位置,我相信在我们编程中,基本都能满足写日志的需求了。

它还有个特性,就是学习成本也低。   在第一篇中,我们也看到了,只需要一个log4net.dll和配置文件一份,就可以直接输出日志了。

那么接下来,我们分析下配置文件的具体作用。

log4net结构和配置文件分析

    ps:配置文件可以自定义文件名,也可以写在程序自带的app.config/web.config。


 主要结构:

log4net 有四种主要的组件,分别是Logger(记录器), Repository(库), Appender(附着器)以及 Layout(布局)。

作用分析:

 Logger(记录器): 是应用程序需要交互的主要组件,它用来产生日志消息。产生的日志消息并不直接显示,还要预先经过Layout的格式化处理后才会输出。

 Repository(库):主要用于负责日志对象组织结构的维护。

   Appender(附着器):  定义输出介质。例如:输出到文件、控制台、数据库、windows事件日志、电子邮件等。

 Layout(布局):格式化日志信息。例如:你想做日志信息中增加当前时间,log4net都有字符代替。[较抽象,看后面具体操作即可]


 配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
  </configSections>
  <log4net>
      <!--appender节点的name可以自定义,但是root节点下的appender-ref节点的ref属性必须对应apperder的name-->
    <!--appender节点和apperder-ref节点应该一一对应-->
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
        </layout>
    </appender>
    <root>
      <!--====控制台控制显示日志====-->
     <appender-ref ref="ConsoleAppender" />
    </root>
  </log4net>
</configuration>

上面的配置我们主要关注appender节点和root节点。其余节点节本暂时不用管。

apperder(附着器):type属性决定日志输出的具体位置。

 

技术分享
AdoNetAppender:针对数据库输出(MS SQL Server,MS Access,Oracle9i,Oracle8i,IBM DB2,SQLite)
AspNetTraceAppender:在AspNetTraceAppender记录消息
BufferingForwardingAppender:缓冲消息,然后输出到apperder
ColoredConsoleAppender:将消息发送到控制台,可以设置背景、字体颜色
ConsoleAppender:将消息发送到控制台
EventLogAppender:将消息发送到应用程序的事件中
FileAppender:将日志写入文件中
ForwardingAppender:详细看官网说明。
ManagedColoredConsoleAppender:可以用来突出显示错误消息
MemoryAppender:内存流附着器
NetSendAppender:详细看官网说明
OutputDebugStringAppender:将日志写入OutputDebugString API
RemotingAppender:将日志传递给remoting
RollingFileAppender:以FileAppender为基础,可以设置按时间或大小重新覆盖日志。
SmtpAppender:通过smtp电子邮件发送日志
SmtpPickupDirAppender:类似smtp,详细可以看官网说明。
TraceAppender:将日志写入.net 基类库提供的跟踪系统(System.Diagnostics.Trace )
UdpAppender:发送到RemoteAddress 上指定 RemotePort。
DynamicPatternLayout:详细看官网说明。
apperder类型

 

以上都是我的概括,有些不好概括的,就没有写,怕误导大家。

大家也可以参考官网说明(有具体的配置信息) http://logging.apache.org/log4net/release/config-examples.html

如果有概括的更好的,也希望和我分享:z13qu#sina.com


 

接下来分析下特殊字符:

在apperder的layout下的conversionPattern 中,可以发现有很多你并不太明白的字符

"%date [%thread]"
让我们来具体看看它们的意思:

%m(message):日志具体内容(第一篇中写的  consoleLoger.Info("这是一行日志");  "这是一行日志"就是%m的内容)

%n(new line):换行

%d(datetime):输出当前语句运行的时刻

%r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数

%t(thread id):当前语句所在的线程ID

%p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等

%c(class):当前日志对象的名称

 

%L:输出语句所在的行号

%F:输出语句所在的文件名

%-数字:表示该项的最小长度,如果不够,则用空格填充

想在回过头来看第一篇的配置文件和输出内容,是否能看明白了呢?

这一篇基本了解了大部分的理论和配置。下一篇,开始通过源码来讲解具体的使用过程。我也会将大部分的注释写在源码中。
希望在实践操作中,感受到最真实的log4net。

 

【Z13区】《Log4net写出适合自己的日志类》第二篇【没有理论的实践是盲目】

标签:

原文地址:http://www.cnblogs.com/xiaofeiniu/p/4699050.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!