一、Log4net使用简介(V1.2.10):
1.http://logging.apache.org/log4net/downloads.html下载incubating-log4net-1.2.10.zip。
2.解压后目录结构:
3.打开Src目录下的工程,用sn工具生成密钥对,编译生成Release版本的Log4net.dll。
4.在应用程序中添加Log4net.dll的引用。
5.配置Log4net时,需要熟悉的是Logger、Appender 以及 Layout。.Logger 是日志记录器,我们使用其相关方法来完成日志记录;Appender 用于设置日志的存储方式和位置,Logger 的配置中会绑定一个或多个 Appender;Layout 关联具体的 Appender,用于设置日志字符串的格式。
Log4net配置文件可写在应用程序的配置文件中,也可写成单独的文件,这里使用单独文件形式(文件名与后缀名可自定义),示例Log4netConfig.xml:
Log4net配置:RollingFileInfoAppender、AdoNetAppender、SmtpAppender
<?xml version="1.0" encoding="utf-8" ?>
- <log4net debug="false">
- <appender name="RollingFileInfoAppender" type="log4net.Appender.RollingFileAppender">
<file value="D:\\Log\\Info\\" />
<appendToFile value="true" />
<maximumFileSize value="100KB" />
<maxSizeRollBackups value="2" />
<StaticLogFileName value="false" />
<DatePattern value="yyyyMMdd".htm"" />
<RollingStyle value="Date" />
- <layout type="log4net.Layout.PatternLayout">
<ConversionPattern value="<HR COLOR=red>%n记录时间: %d [%t] <BR>%n日志级别: %-5p<BR>%n日志记录器: %c[%x]<BR>%n%m <BR>%n <HR Size=1>" />
</layout>
</appender>
- <appender name="RollingFileErrorAppender" type="log4net.Appender.RollingFileAppender">
<file value="D:\\Log\\Error\\" />
<appendToFile value="true" />
<maximumFileSize value="100KB" />
<maxSizeRollBackups value="2" />
<StaticLogFileName value="false" />
<DatePattern value="yyyyMMdd".htm"" />
<RollingStyle value="Date" />
- <layout type="log4net.Layout.PatternLayout">
<ConversionPattern value="<HR COLOR=red>%n异常时间: %d [%t] <BR>%n异常级别: %-5p<BR>%n异常记录器: %c[%x]<BR>%n%m <BR>%n <HR Size=1>" />
</layout>
</appender>
- <appender name="AdoNetAppender" type="log4net.Appender.AdoNetAppender">
<bufferSize value="1" />
- <!-- 表示批处理的日志事件,可以避免每次日志事件都访问数据库
-->
<connectionType value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<connectionString value="data source=dbServer;initial catalog=LogTest;integrated security=false;persist security info=True;User ID=id;Password=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>
- <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender,log4net">
<to value="Weiwei.Jiang@BenQ.com" />
<from value="virtualApp@BenQ.com" />
<username value="username" />
<password value="password" />
<smtpHost value="smtpHost" />
<subject value="Hi,this is test logging message" />
<bufferSize value="1" />
<lossy value="false" />
- <evaluator type="log4net.Core.LevelEvaluator,log4net">
<threshold value="FATAL" />
</evaluator>
- <layout type="log4net.Layout.PatternLayout,log4net">
<conversionPattern value="%property{log4net:HostName} :: %level :: %message %newlineLogger: %logger%newlineThread: %thread%newlineDate: %date%newlineNDC: %property{NDC}%newline%newline" />
</layout>
</appender>
- <root>
<level value="DEBUG" />
<appender-ref ref="" />
</root>
- <logger name="LogInfo">
<level value="INFO" />
<appender-ref ref="RollingFileInfoAppender" />
</logger>
- <logger name="LogError">
<level value="ERROR" />
<appender-ref ref="RollingFileErrorAppender" />
</logger>
- <logger name="AdoNetLogger">
<level value="WARN" />
<appender-ref ref="AdoNetAppender" />
</logger>
- <logger name="SmtpLogger">
<level value="FATAL" />
<appender-ref ref="SmtpAppender" />
</logger>
</log4net>
所有 Logger 的参数设置都直接或间接继承自 root,其继承关系类似 namespace。而对Appender属性来说,子日志对象则会继承父日志对象的Appender列表。这种缺省的行为方式也可以通过显式地设定<logger>标签的additivity属性为false而改变。
在创建 Logger 设置时,需要注意 "level" 参数。Log4net 允许我们通过该参数调整日志记录级别,只有高于或等于该级别的日志才会被记录下来。
( Highest) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (Lowest)
6.在应用程序中添加程序集关联:[assembly: log4net.Config.XmlConfigurator(ConfigFile="Log4netConfig.xml",Watch=true)],其中ConfigFile就是你存放Log4net配置信息的文件名(加后缀)。
WinForms程序是在AssemblyInfo.cs中添加,而Asp.net程序可在AssemblyInfo.cs或者Global.asax中添加。
(使用相对路径时在WinForms程序中配置文件(示例Log4netConfig.xml)需放在Bin目录下)
7.Log4net初始化配置,Asp.net程序在Global.asax中的Application_Start方法中添加如下代码:
log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("Log4netConfig.xml"));
初始化配置是可选的,如果没有显示的进行初始化在第一次调用时Log4net会先进行初始化,但官方文挡上的建议是在程序运行时就将Log4net进行初始化。
8.在程序中调用:
调用示例
private static readonly ILog LogInfo = LogManager.GetLogger("LogInfo");
private void LogTest()
{
if (LogInfo.IsInfoEnabled)
{
LogInfo.Info("Logging info!"); //向文件中记录操作信息
}
}
二、Log4net日志查看工具:
log4Net Dashboard是一个不错的日志查看工具,针对的apprender是AdoNetAppender,也就是以数据库形式记录的日志。使用时,只要简单的配置一下数据库连接字符串就可以了。运行效果:
下载地址:http://www.l4ndash.com/Download/tabid/53/Default.aspx