log4net的各种Appender配置示例
本文对各种内置的appender的配置提供了示例,但却远称不上详尽。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e 要想了解每一种appender的参数和选项的说明,请参看该appender的SDK文档。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
以下示例都是.NET 2.0下进行的, log4net的版本为1.2.10。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
AdoNetAppender
详情参考 log4net.Appender. AdoNetAppender SDK文档。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
AdoNetAppender的相关配置内容取决于目标数据库的provider。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e 下面仅提供SQL Server 2000的例子。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
首先建立数据表:
(
[Id] [int] IDENTITY (1, 1) NOT NULL,
[Date] [datetime] NOT NULL,
[Thread] [varchar] (255) NOT NULL,
[Level] [varchar] (50) NOT NULL,
[Logger] [varchar] (255) NOT NULL,
[Message] [varchar] (4000) NOT NULL,
[Exception] [varchar] (2000) NULL
)
然后添加配置:
<bufferSize value="2" />
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=2.0.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="server=(local);database=TestBase;integrated security=false;persist security info=True;UID=sa;PWD=" />
<commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
<parameter>
<parameterName value="@log_date" />
<dbType value="DateTime" />
<layout type="log4net.Layout.RawTimeStampLayout" />
</parameter>
<parameter>
<parameterName value="@thread" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%thread" />
</layout>
</parameter>
<parameter>
<parameterName value="@log_level" />
<dbType value="String" />
<size value="50" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%level" />
</layout>
</parameter>
<parameter>
<parameterName value="@logger" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%logger" />
</layout>
</parameter>
<parameter>
<parameterName value="@message" />
<dbType value="String" />
<size value="4000" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
<parameter>
<parameterName value="@exception" />
<dbType value="String" />
<size value="2000" />
<layout type="log4net.Layout.ExceptionLayout" />
</parameter>
</appender>
bufferSize表示批处理的日志事件,可以避免每次日志事件都访问数据库;ConnectionType指定了要使用的IDbConnection的完全限定类型名称;connectionString表示连接字符串;CommandText是SQL语句或存储过程;最后一组parameter节点描述了SQL语句或存储过程需要的参数。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
AspNetTraceAppender
详情参考 log4net.Appender.AspNetTraceAppender SDK 文档。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
这段配置可将日志信息输出到页面的Trace上下文环境。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e 如果日志的级别低于WARN,会以System.Web.TraceContext.Write方法输出;如果级别为WARN或WARN以上则会以System.Web.TraceContext.Warn方法输出,下图中的日志信息的不同颜色可以说明这一点。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e 效果图如下:
这在进行页面调试的时候可是很方便的。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
BufferingForwardingAppender
详情参考 log4net.Appender.BufferingForwardingAppender SDK 文档。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
<bufferSize value="5"/>
<lossy value="true" />
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="WARN"/>
</evaluator>
<appender-ref ref="LogFileAppender" />
<appender-ref ref="AspNetTraceAppender" />
</appender>
BufferingForwardingAppender的主要作用是将输出到指定类型(这里是LogFileAppender)的Appender的日志信息进行缓存。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e bufferSize属性指定了缓存的数量,如果value为5,那么将在信息量达到6条的时候,把这些日志批量输出。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e appender-ref属性指定了缓存的Appender类型,同root节点一样,这里可以指定多个。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
ColoredConsoleAppender
详情参考log4net.Appender.ColoredConsoleAppender SDK 文档。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
ColoredConsoleAppender将日志信息输出到控制台。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e 默认情况下,日志信息被发送到控制台标准输出流。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e 下面这个示例演示了如何高亮显示Error信息。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
<mapping>
<level value="ERROR" />
<foreColor value="White" />
<backColor value="Red, HighIntensity" />
</mapping>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
效果如下:

还可以为不同的级别指定不同的颜色:
<mapping>
<level value="ERROR" />
<foreColor value="White" />
<backColor value="Red, HighIntensity" />
</mapping>
<mapping>
<level value="DEBUG" />
<backColor value="Green" />
</mapping>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
效果如下:

ConsoleAppender
详情参考 log4net.Appender.ConsoleAppender SDK 文档。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
ConsoleAppender将日志信息输出到控制台标准输出流。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
</appender>
EventLogAppender
详情参考 log4net.Appender.EventLogAppender SDK 文档。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
EventLogAppender将日志写入本地机器的应用程序事件日志中。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e 默认情况下,该日志的源(Source)是AppDomain.FriendlyName,也可以手动指定其它名称。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
</appender>
FileAppender
详情参考 log4net.Appender.File Appender SDK 文档。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
FileAppender将日志信息输出到指定的日志文件。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
<!--[if !vml]-->
<param name="File" value="WebUtilClient.log" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
</appender>
File指定了文件名称,可以使用相对路径,此时日志文件的位置取决于项目的类型(如控制台、Windows Forms、ASP.NET等);也可以使用绝对路径;甚至可以使用环境变量,如<file value="${TMP}\log-file.txt" />。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
AppendToFile指定是追加到还是覆盖掉已有的日志文件。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
还可以添加如下属性<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />来使用最小锁定模型(minimal locking model),以允许多个进程可以写入同一个文件。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
ForwardingAppender
详情参考 log4net.Appender.ForwardingAppender SDK 文档。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
ForwardingAppender可以用来为一个Appender指定一组约束。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e 看下面这个示例:
<threshold value="WARN"/>
<appender-ref ref="ConsoleAppender" />
</appender>
在这个示例中,为ConsoleAppender添加了约束,Threshold为WARN。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e 这意味着对于一条日志信息,如果直接使用ConsoleAppender,那么不论它是什么级别,总会进行输出,而如果使用这个ForwardingAppender,则只有那些WARN或WARN以上的日志才会发送到ConsoleAppender。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
MemoryAppender
详情参考 log4net.Appender.MemoryAppender SDK 文档。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
似乎不应该使用配置文件来配置MemoryAppender,但如果你非要这么做,看看这个示例(未验证):
<onlyFixPartialEventData value="true" />
</appender>
NetSendAppender
详情参考 log4net.Appender.NetSendAppender SDK 文档。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
NetSendAppender向特定用户的屏幕发送消息(未验证)。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
<threshold value="ERROR" />
<server value="Anders" />
<recipient value="xym" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
OutputDebugStringAppender
详情参考 log4net.Appender.OutputDebugStringAppender SDK 文档。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
下面这个例子描述了如何配置该Appender以向OutputDebugString API写入日志(未验证)。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
RemotingAppender
详情参考 log4net.Appender.RemotingAppender SDK 文档。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
RemotingAppender向特定的Sink发送日志信息(未验证):
<!--[if !vml]-->
<sink value="tcp://localhost:8085/LoggingSink" />
<lossy value="false" />
<bufferSize value="95" />
<onlyFixPartialEventData value="true" />
</appender>
RollingFileAppender
详情参考 log4net.Appender.RollingFileAppender SDK 文档。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
RollingFileAppender以FileAppender为基础,与后者有着相同的配置选项。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
下面这个例子演示了如何配置RollingFileAppender以写入log.txt文件。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e 写入的文件名总是为log.txt(StaticLogFileName参数指定为true);根据文件大小(RollingStyle)来生成新的文件;最多保存有10个文件(MaxSizeRollBackups属性,而且一旦写满10个文件,就不再写入日志了),每个文件最大为10KB。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e 这些文件名称为log.txt.1, log.txt.2…等。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
<param name="File" value="log\Log.txt" />
<param name="AppendToFile" value="true" />
<param name="MaxSizeRollBackups" value="10" />
<param name="MaximumFileSize" value="5MB" />
<param name="RollingStyle" value="Size" />
<param name="StaticLogFileName" value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" />
</layout>
</appender>
SmtpAppender
详情参考 log4net.Appender.SmtpAppender SDK 文档。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
SmtpAppender通过Smtp邮件服务器发送日志信息:
<authentication value="Basic" />
<to value="anderscui@tom.com" />
<from value="anderscui@163.com" />
<username value="anderscui" />
<password value="password" />
<subject value="test logging message" />
<smtpHost value="smtp.163.com" />
<bufferSize value="512" />
<lossy value="true" />
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="WARN"/>
</evaluator>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
</layout>
</appender>
将其中的to、from、username、password、subject、smtpHost配置正确才可能发送成功。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e bufferSize可将多条信息打包在一个邮件中。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e evaluator可以对日志进行过滤。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
SmtpPickupDirAppender
详情参考 log4net.Appender.SmtpPickupDirAppender SDK 文档。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
配置与SmtpAppender类似,但要把SmtpHost换为PickupDir(未验证)。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
<to value="to@domain.com" />
<from value="from@domain.com" />
<subject value="test logging message" />
<pickupDir value="C:\SmtpPickup" />
<bufferSize value="512" />
<lossy value="true" />
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="WARN"/>
</evaluator>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" />
</layout>
</appender>
TraceAppender
详情参考 log4net.Appender.TraceAppender SDK 文档。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
TraceAppender将日志信息写入System.Diagnostics.Trace系统(出现在输出窗口)。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
UdpAppender
详情参考 log4net.Appender.UdpAppender SDK 文档。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
下例演示了如何配置UdpAppender(未验证):
<localPort value="8080" />
<remoteAddress value="224.0.0.1" />
<remotePort value="8080" />
<layout type="log4net.Layout.PatternLayout, log4net">
<conversionPattern value="%-5level %logger [%property{NDC}] - %message%newline" />
</layout>
</appender>
上面有若干个Appender标注为"未验证"的,是指这些Appender极少用到,或者在我的机器上没能实现 :(
希望这些内容能对您有所帮助。= " p o s t T i t l e " (Wl o g 4 n e © 2004-2008 EDZH.COM.= " p o s t T i t l e " (Wl o g 4 n e
发表评论
| 标题: |
| 姓名: |
| 主页: |
|
验证码: |
| 内 容(1000个字符以内,不支持html) |
本站推荐
-
热点回顾
- Create and Control Windows Services--Not a Slap Shot, but Almost as Fast【等级:高级】
- DesignPatterns:SolidifyYourC#ApplicationArchitecturewithDesignPatterns中文版(尾篇一)
- Web Services: Building Reusable Web Components with SOAP and ASP.NET(English)
- Create and Control Windows Services--Add File-Monitoring Functionality【等级:高级】
- DesignPatterns:SolidifyYourC#ApplicationArchitecturewithDesignPatterns中文版(中篇)
- MSDN: Using HTTP Modules and Handlers to Create Pluggable ASP.NET Components
- Invalidating an ASP.NET Web Application Cache Item from SQL Server (Part 1 )
- UnifytheRole-BasedSecurityModelsforEnterpriseandApplicationDomainswith.NET
- ASP.NET中创建RSACryptoServiceProvider引发“未能获取此实现的 CryptoAPI 加密服务提供程序(CSP)”的解决
- 设计并实现用于ASP.NET一个通用的数据存取层应用程序 原作者 Paul Abarham 翻译 cwxiao888@163.com
- 在asp.net里创建CrystalReportViewer时老是出错,后来在这里查了些资料才搞定要在web.config中设置如下
- Using Reflection to Bind Business Objects to ASP.NET Form Controls
- On the Way to Mastering ASP.NET: Introducing Custom Entity Classes
- 使用 Microsoft Visual C# 进行 Microsoft Word 2002 和 Excel 2002 编程(一)
- 使用 Microsoft Visual C# 进行 Microsoft Word 2002 和 Excel 2002 编程(二)
