转载

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

第一篇 中,已经真刀实枪用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属性决定日志输出的具体位置。

【Z13区】《Log4net写出适合自己的日志类》第二篇【没有理论的实践是盲目】
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。

正文到此结束
Loading...