LogNet是一套开源的程序日志记录系统,经过配置后可以自动抓取程序中的错误、异常信息,并写入磁盘,也可以在异常发生时执行其他指定的操作,比如:通知某人右键、写入数据库等。
这里写个AspNet应用LogNet的Demo:
1.建立AspNet网站,在web.config中写LogNet的配置文件:
<?xml version="1.0"?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/> </configSections> <log4net> <!--错误日志配置--> <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log\\LogError\\"/> <!--文件路径--> <param name="AppendToFile" value="true"/> <param name="MaxSizeRollBackups" value="100"/> <param name="MaxFileSize" value="10240"/> <param name="StaticLogFileName" value="false"/> <param name="DatePattern" value="yyyyMMdd"/> <param name="RollingStyle" value="Date"/> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%n异常时间:%d [%t] %n异常级别:%-5p %n异 常 类:%c [%x] %n%m %n "/> </layout> </appender> <!--信息日志配置--> <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log\\LogInfo\\"/> <!--文件路径--> <param name="AppendToFile" value="true"/> <param name="MaxFileSize" value="10240"/> <param name="MaxSizeRollBackups" value="100"/> <param name="StaticLogFileName" value="false"/> <param name="DatePattern" value="yyyyMMdd"/> <param name="RollingStyle" value="Date"/> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%n日志时间:%d [%t] %n日志级别:%-5p %n日 志 类:%c [%x] %n%m %n"/> </layout> </appender> <!--控制台--> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%5level [%thread] (%file:%line) - %message%newline"/> </layout> </appender> <!--log4net.LogManager.GetLogger("logerror")用这个来选择这种类型--> <logger name="logerror"> <level value="ERROR"/> <appender-ref ref="ErrorAppender"/> </logger> <!--log4net.LogManager.GetLogger("loginfo")用这个来选择这种类型--> <logger name="loginfo"> <level value="INFO"/> <appender-ref ref="InfoAppender"/> </logger> <root> <level value="INFO"/> <appender-ref ref="InfoAppender"/> <appender-ref ref="ConsoleAppender"/> </root> </log4net> <system.web> <compilation debug="true"/></system.web></configuration>
2.建立日志记录Log类库,实现方法
/// <summary> /// LogHelper的摘要说明。 /// </summary> public class LogHelper { private LogHelper() { } public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo"); //选择<logger name="loginfo">的配置 public static readonly log4net.ILog logerror = log4net.LogManager.GetLogger("logerror"); //选择<logger name="logerror">的配置 /// <summary> /// 默认配置。按配置文件 /// </summary> public static void SetConfig() { log4net.Config.XmlConfigurator.Configure(); } /// <summary> /// 手动设置,作用未知 /// </summary> /// <param name="configFile"></param> 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); } } }
3.在网站的Global.asax中配置网站与LogNet的联系。
public class Global : System.Web.HttpApplication { void Application_End(object sender, EventArgs e) { // 在应用程序关闭时运行的代码 } void Session_Start(object sender, EventArgs e) { // 在新会话启动时运行的代码 } void Session_End(object sender, EventArgs e) { // 在会话结束时运行的代码。 // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为 // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer // 或 SQLServer,则不会引发该事件。 } /// <summary> /// 程序启动时配置lognet /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Application_Start(Object sender, EventArgs e) { //若不想把lognet配置文件写在web.config中,也可以另外手动指定。 //XmlConfigurator.Configure(new FileInfo(HttpContext.Current.Server.MapPath("~/App_Data/log4net.config"))); } /// <summary> /// 程序出错时通过lognet写日志 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> protected void Application_Error(Object sender, EventArgs e) { Exception objExp = HttpContext.Current.Server.GetLastError(); LogHelper.WriteLog("\r\n客户机IP:" + Request.UserHostAddress + "\r\n错误地址:" + Request.Url + "\r\n异常信息:" + Server.GetLastError().Message, objExp); } }
这样,当网站出错时,就会自动在网站目录的Log\LogError与LogInfo下写如文本日志。