Log4Net配置以及使用
跟踪程序代码,及时发现程序的运行状态,是每个成熟的软件所必不可少的一个环节,网站发布到真实的环境之后,对于程序的运行状态,我们并不能想开发环境那也,点击调试。日志记录显示就尤为重要,在.NET中记录日志的方法有很多种,常用的也就是Log4net,NLog。这篇文章主要记录Log4net的使用情况,NLog的使用放在后续章节介绍。(PS:其他同仁也介绍了很多关于Log4net的使用,我再他们的基础上梳理了一下使用方式,按自己的理解写下了这篇内容,如果有部分内容雷同,还望原博主理解)
Log4net是针对.Net程序开发的一版日志记录的DLL组件,使用者只需要配置Config文件,点击添加引用DLL。使用起来也简单方便。Log4Net官网地址有开源的项目,我们开源获取源码,分析代码,这里主要针对使用方面进行介绍:Config文件的配置、API部分代码完善;Log4Net下载DLL
Log4net的日志等级从低到高依次分为:ALL ---> DEBUG ---> INFO ---> WARN ---> ERROR ---> FATAL ---> OFF
Log4net中Config配置介绍:
下面是一个完善的config的配置,将日志信息配置到文本文件中;
<?xml version="1.0"?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /> </configSections> <!--日志--> <log4net> <!--<root> <level value="ALL"/> <appender-ref ref="ErrorAppender"/> <appender-ref ref="InfoAppender"/> </root>--> <logger name="logerror"> <level value="ERROR" /> <appender-ref ref="ErrorAppender" /> </logger> <logger name="loginfo"> <level value="INFO" /> <appender-ref ref="InfoAppender" /> </logger> <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="App_Log\\Error\\" /> <param name="AppendToFile" value="true" /> <param name="StaticLogFileName" value="false"/> <param name="MaximumFileSize" value="10MB"/> <param name="Threshold" value="ALL"></param> <param name="DatePattern" value="yyyyMM"\\log_"yyyyMMdd".log""/> <param name="RollingStyle" value="Composite"/> <param name="CountDirection" value="1"/> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%-5p %d [%c] %m%n" /> </layout> </appender> <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="App_Log\\Info\\" /> <param name="AppendToFile" value="true" /> <param name="StaticLogFileName" value="false"/> <param name="MaximumFileSize" value="10MB"/> <param name="Threshold" value="ALL"></param> <datePattern value="yyyyMMdd" /> <param name="RollingStyle" value="Date"/> <param name="CountDirection" value="1"/> <layout type="log4net.Layout.PatternLayout"> <param name="Header" value="-------------start----------- "/> <param name="ConversionPattern" value="%-5p %d [%c] %m%n" /> </layout> </appender> </log4net> </configuration>
config配置参数说明如下:
参数名 |
描述 |
||||||||||||||||||||
filter |
可以有0或多个filter,具体配置在下面的Filter项说明。 |
||||||||||||||||||||
layout |
可以有0或者说1个layout,当没有layout时,没有输出。具体配置在下面的layout项说明 |
||||||||||||||||||||
param |
Param有多个可以进行配置,常用的:
例如: <param name="File" value="UpLoads\\Log\\"/> <param name="MaximumFileSize" value="3000"/> <param name="StaticLogFileName" value="false"/> <param name="Threshold" value="Debug"></param> <param name="DatePattern" value="yyyyMM"\\#{ServerHostName}-"yyyyMMdd".log""/> <param name="RollingStyle" value="Date"/> |
ConversionPattern中的部分标识符的意义介绍如下:
<!--==================layout节点的配置说明start======================--> %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息 %n(new line):换 行 %d(datetime):输出当前语句运行的时刻 %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数 %t(thread id):当前语句所在的线程ID %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等 %c(class):当前日志对象的名称,例如: 模式字符串为:%-10c -%m%n 代码为: ILog log=LogManager.GetLogger(“Exam.Log”); log.Debug(“Hello”); 则输出为下面的形式: Exam.Log - Hello %L:输出语句所在的行 号 %F:输出语句所在的文件名 %-数字:表示该项的最小长度,如果不够,则用空格填充 <!--==================layout节点的配置说明end======================-->
C#代码使用介绍
添加代码如下:
/// <summary> /// 使用LOG4NET记录日志的功能,在WEB.CONFIG里要配置相应的节点 /// </summary> public class Log4NetHelper { //log4net日志专用 public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo"); public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror"); public static void SetConfig() { log4net.Config.XmlConfigurator.Configure(); } public static void SetConfig(FileInfo configFile) { log4net.Config.XmlConfigurator.Configure(configFile); } /// <summary> /// 普通的文件记录日志 /// </summary> /// <param name="info"></param> public static void WriteLog(string info) { if (loginfo.IsInfoEnabled) { loginfo.Info(info); } } /// <summary> /// 错误日志 /// </summary> /// <param name="info"></param> /// <param name="se"></param> public static void WriteLog(string info, Exception se) { if (logerror.IsErrorEnabled) { logerror.Error(info, se); } } }
主程序中记录Log的使用方式:
static void Main(string[] args) { Log4NetHelper.SetConfig(); //ILog lgclient = LogManager.GetLogger("loginfo"); //lgclient.Info("Info-message"); //lgclient.Debug("Debug-message"); //lgclient.Warn("Warn-message"); LogHelper.WriteLog("MyWorkLogInfo"); Console.ReadLine(); }