C# Log4net用法
2017-01-07 21:16
2882 人阅读

介绍
log4net是.Net下一个非常优秀的开源日志记录组件。log4net记录日志的功能非常强大。
本文主要是介绍如何在Visual Studio2013中使用log4net快速创建系统日志。
下载log4net log4net.dll
创建Asp.net Mvc项目
添加 log4net.config文件(用以配置log4net) 将下载好的log4net.dll添加引用到项目内
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <log4net> <appender name="InfoAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log\Info\" /> <encoding value="utf-8" /> <param name="AppendToFile" value="true" /> <param name="MaxSizeRollBackups" value="10" /> <param name="MaximumFileSize" value="10MB" /> <param name="RollingStyle" value="Composite" /> <param name="DatePattern" value="yyyyMM\\yyyyMMdd\\yyyyMMdd_HH'\.\t\x\t'"/> <param name="StaticLogFileName" value="false" /> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="=================Start===================== %n时间:%d%n类型:%c%n线程:[%t] %n级别:%p %n输出:%m%n%n" /> </layout> </appender> <appender name="ErrorAppender" type="log4net.Appender.RollingFileAppender"> <param name="File" value="Log\Error\" /> <encoding value="utf-8" /> <param name="AppendToFile" value="true" /> <param name="MaxSizeRollBackups" value="10" /> <param name="MaximumFileSize" value="10MB" /> <param name="RollingStyle" value="Composite" /> <param name="DatePattern" value="yyyyMM\\yyyyMMdd\\yyyyMMdd_HH'\.\t\x\t'"/> <param name="StaticLogFileName" value="false" /> <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="=================Start===================== %n时间:%d%n类型:%c%n线程:[%t] %n级别:%p %n输出:%m%n%n" /> </layout> </appender> <logger name="loginfo"> <level value="INFO" /> <appender-ref ref="InfoAppender" /> </logger> <logger name="logerror"> <level value="ERROR" /> <appender-ref ref="ErrorAppender" /> </logger> </log4net> </configuration>
添加LogHelper.cs类文件(和log4net.config放在同一个文件夹内容)
public static class LogHelper { const string LOG4NET_CONFIG_FILE_NAME = "log4net.config"; private static ILog log_info; /// <summary> /// 调试信息日志 /// </summary> private static ILog LOG_INFO { get { if (log_info == null) { Init(); } return log_info; } } private static ILog log_error; /// <summary> /// 异常信息日志 /// </summary> private static ILog LOG_ERROR { get { if (log_error == null) { Init(); } return log_error; } } /// <summary> /// /// </summary> private static void Init() { string fileName = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, LOG4NET_CONFIG_FILE_NAME); if (!File.Exists(fileName)) WriteLog4NetConfig(fileName); FileInfo fi = new FileInfo(fileName); log4net.Config.XmlConfigurator.Configure(fi); log_error = LogManager.GetLogger("logerror"); log_info = LogManager.GetLogger("loginfo"); } /// <summary> /// 写出log4net配置信息文件 /// </summary> /// <param name="fileName">输出文件名称</param> private static void WriteLog4NetConfig(string fileName) { FileStream fs = null; Stream xmlStream = null; byte[] bytsXml; int lenByts; try { Assembly asmCurrent = Assembly.GetExecutingAssembly(); xmlStream = asmCurrent.GetManifestResourceStream(typeof(LogHelper).Namespace + "." + LOG4NET_CONFIG_FILE_NAME); bytsXml = new byte[xmlStream.Length]; using (fs = File.Create(fileName)) { while ((lenByts = xmlStream.Read(bytsXml, 0, bytsXml.Length)) > 0) { //向文件中写信息 fs.Write(bytsXml, 0, lenByts); fs.Flush(); } } } finally { if (fs != null) fs.Close(); if (xmlStream != null) xmlStream.Close(); } } public static void Error(string message) { LOG_ERROR.Error(message); } public static void Error(string message, Exception ex) { LOG_ERROR.Error(message, ex); } public static void Info(string message) { LOG_INFO.Info(message); } public static void Info(string message, Exception ex) { LOG_INFO.Info(message, ex); } }
在控制器里写入Log测试
LogHelper.Error("系统出错了");
LogHelper.Info("记录一些事情");
这时候就有日志文件生成了
注意: 如果文件log4net.config和启动项目不再一个启动程序中,该文件需要设置属性 生成操作 - "嵌入的资源"
如果想要邮件提醒功能,log4net也是可以配置的,这时候只需要修改log4net.config文件即可,添加如下配置
<!--邮箱设置--> <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender"> <!-- SMTP 验证方式 --> <authentication value="Basic" /> <to value="接收方地址@gmail.com" /> <from value="发送方地址@163.com" /> <username value="发送方地址@163.com" /> <password value="发送方地址密码" /> <subject value="站点访问异常" /> <!--邮件服务端--> <smtpHost value="smtp.163.com"/> <bufferSize value="512" /> <lossy value="true" /> <!--这里我设置的是Error ,会接收(FATAL和ERROR日志)你可以根据自己的需要设置 Log4net支持多种级别的日志。优先级从高到低依次排列如下: FATAL > ERROR > WARN > INFO > DEBUG --> <evaluator type="log4net.Core.LevelEvaluator"> <threshold value="Error"/> </evaluator> <!--输出格式--> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%d [%t] %n %-5level %logger [%property{NDC}] %n %message%n" /> </layout> </appender>
添加到上面log4net.config <appender-ref ref="ErrorAppender" /> 下面
<appender-ref ref="SmtpAppender" />
这时候只要系统调用了写错误日志,系统也会同时发送一封邮件
源码下载地址: log4net写日志源码
和博主交个朋友吧
