在第一篇中,已经真刀实枪用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:详细看官网说明。
以上都是我的概括,有些不好概括的,就没有写,怕误导大家。
大家也可以参考官网说明(有具体的配置信息) 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。