log4net 使用记录
1、下载地址
http://logging.apache.org/log4net/download.html
2、log4net的配置文件。
CS程序,在根目录的Program.cs中的Main方法中添加:
log4net.Config.XmlConfigurator.Configure();
BS程序,在根目录的Global.asax.cs(没有新建一个)中的Application_Start方法中添加:
1 protected void Application_Start(object sender, EventArgs e) 2 { 3 log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo(Server.MapPath("~") + @"\log4net.xml")); 4 }
3、修改配置文件修
如果是CS程序,则在默认的App.config文件(没有新建一个)中添加内容;如果是BS程序,则添加到Web.config文件中,添加内容一样,这里不再列出。
1 <?xml version="1.0" encoding="utf-8" ?> 2 3 <configuration> 4 5 <configSections> 6 7 <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 8 9 </configSections> 10 <log4net> 11 <root> 12 <level value="ALL"/> 13 </root> 14 <!-- 系统日志,或者基本日志 --> 15 <appender name="SysLogFileAppender" type="log4net.Appender.RollingFileAppender"> 16 <param name="File" value="LogEvent//System//Log_"/> 17 <param name="AppendToFile" value="true"/> 18 <datePattern value="yyyy-MM-dd".txt""/> 19 <param name="RollingStyle" value="Date"/> 20 <param name="StaticLogFileName" value="false"/> 21 <layout type="log4net.Layout.PatternLayout"> 22 <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - 日志级别:%-5level %message %newline %newline"/> 23 </layout> 24 </appender> 25 26 27 <logger name="cmcTools.Web"> 28 <level value="ALL"/> 29 <appender-ref ref="SysLogFileAppender"/> 30 </logger> 31 32 </log4net> 33 </configuration>
当然,也可以直接写到单个XML文件中,然后如第二步一样,加载该文件,XML文件格式如下:
1 <?xml version="1.0" encoding="utf-8" ?> 2 <log4net> 3 <root> 4 <level value="ALL"/> 5 </root> 6 <!-- 系统日志,或者基本日志 --> 7 <appender name="SysLogFileAppender" type="log4net.Appender.RollingFileAppender"> 8 <param name="File" value="LogEvent//System//Log_"/> 9 <param name="AppendToFile" value="true"/> 10 <datePattern value="yyyy-MM-dd".txt""/> 11 <param name="RollingStyle" value="Date"/> 12 <param name="StaticLogFileName" value="false"/> 13 <layout type="log4net.Layout.PatternLayout"> 14 <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - 日志级别:%-5level %message %newline %newline"/> 15 </layout> 16 </appender> 17 18 19 <logger name="cmcTools.Web"> 20 <level value="ALL"/> 21 <appender-ref ref="SysLogFileAppender"/> 22 </logger> 23 24 </log4net>
4、代码中使用
var sysLog4net = LogManager.GetLogger("cmcTools.Web"); //创建日志 sysLog4net.Info(message);
在实际项目中,日志可能是按模块来划分记录的,同时每个模块下可能又分信息日志和错误日志,配置文件如下:
View Code
1 <?xml version="1.0" encoding="utf-8" ?> 2 <log4net> 3 <root> 4 <level value="ALL"/> 5 </root> 6 <!-- 系统日志,或者基本日志 --> 7 <appender name="SysLogFileAppender" type="log4net.Appender.RollingFileAppender"> 8 <param name="File" value="LogEvent//System//Log_"/> 9 <param name="AppendToFile" value="true"/> 10 <datePattern value="yyyy-MM-dd".txt""/> 11 <param name="RollingStyle" value="Date"/> 12 <param name="StaticLogFileName" value="false"/> 13 <layout type="log4net.Layout.PatternLayout"> 14 <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - 日志级别:%-5level %message %newline %newline"/> 15 </layout> 16 </appender> 17 18 <!-- C7操作日志 --> 19 <appender name="C7LogFileAppenderInfo" type="log4net.Appender.RollingFileAppender"> 20 <param name="File" value="LogEvent//C7//Info//Log_"/> 21 <param name="AppendToFile" value="true"/> 22 <datePattern value="yyyy-MM-dd".txt""/> 23 <param name="RollingStyle" value="Date"/> 24 <param name="StaticLogFileName" value="false"/> 25 <layout type="log4net.Layout.PatternLayout"> 26 <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - 日志级别:%-5level %message %newline %newline"/> 27 </layout> 28 <filter type="log4net.Filter.LevelRangeFilter"> 29 <param name="LevelMin" value="DEBUG" /> 30 <param name="LevelMax" value="INFO" /> 31 </filter> 32 </appender> 33 <!-- C7错误日志 --> 34 <appender name="C7LogFileAppenderError" type="log4net.Appender.RollingFileAppender"> 35 <param name="File" value="LogEvent//C7//Error//Log_"/> 36 <param name="AppendToFile" value="true"/> 37 <datePattern value="yyyy-MM-dd".txt""/> 38 <param name="RollingStyle" value="Date"/> 39 <param name="StaticLogFileName" value="false"/> 40 <layout type="log4net.Layout.PatternLayout"> 41 <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - 日志级别:%-5level %message %newline %newline"/> 42 </layout> 43 <filter type="log4net.Filter.LevelRangeFilter"> 44 <param name="LevelMin" value="WARN" /> 45 <param name="LevelMax" value="FATAL" /> 46 </filter> 47 </appender> 48 49 50 <!-- CheckCIIS操作日志 --> 51 <appender name="CheckCIISLogFileAppenderInfo" type="log4net.Appender.RollingFileAppender"> 52 <param name="File" value="LogEvent//CheckCIIS//Info//Log_"/> 53 <param name="AppendToFile" value="true"/> 54 <datePattern value="yyyy-MM-dd".txt""/> 55 <param name="RollingStyle" value="Date"/> 56 <param name="StaticLogFileName" value="false"/> 57 <layout type="log4net.Layout.PatternLayout"> 58 <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - 日志级别:%-5level %message %newline %newline"/> 59 </layout> 60 <filter type="log4net.Filter.LevelRangeFilter"> 61 <param name="LevelMin" value="DEBUG" /> 62 <param name="LevelMax" value="INFO" /> 63 </filter> 64 </appender> 65 66 <!-- CheckCIIS错误日志 --> 67 <appender name="CheckCIISLogFileAppenderError" type="log4net.Appender.RollingFileAppender"> 68 <param name="File" value="LogEvent//CheckCIIS//Error//Log_"/> 69 <param name="AppendToFile" value="true"/> 70 <datePattern value="yyyy-MM-dd".txt""/> 71 <param name="RollingStyle" value="Date"/> 72 <param name="StaticLogFileName" value="false"/> 73 <layout type="log4net.Layout.PatternLayout"> 74 <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - 日志级别:%-5level %message %newline %newline"/> 75 </layout> 76 <filter type="log4net.Filter.LevelRangeFilter"> 77 <param name="LevelMin" value="WARN" /> 78 <param name="LevelMax" value="FATAL" /> 79 </filter> 80 </appender> 81 82 83 <!-- SL操作日志 --> 84 <appender name="SLLogFileAppenderInfo" type="log4net.Appender.RollingFileAppender"> 85 <param name="File" value="LogEvent//SL//Info//Log_"/> 86 <param name="AppendToFile" value="true"/> 87 <datePattern value="yyyy-MM-dd".txt""/> 88 <param name="RollingStyle" value="Date"/> 89 <param name="StaticLogFileName" value="false"/> 90 <layout type="log4net.Layout.PatternLayout"> 91 <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - 日志级别:%-5level %message %newline %newline"/> 92 </layout> 93 <filter type="log4net.Filter.LevelRangeFilter"> 94 <param name="LevelMin" value="DEBUG" /> 95 <param name="LevelMax" value="INFO" /> 96 </filter> 97 </appender> 98 99 <!-- SL错误日志 --> 100 <appender name="SLLogFileAppenderError" type="log4net.Appender.RollingFileAppender"> 101 <param name="File" value="LogEvent//SL//Error//Log_"/> 102 <param name="AppendToFile" value="true"/> 103 <datePattern value="yyyy-MM-dd".txt""/> 104 <param name="RollingStyle" value="Date"/> 105 <param name="StaticLogFileName" value="false"/> 106 <layout type="log4net.Layout.PatternLayout"> 107 <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - 日志级别:%-5level %message %newline %newline"/> 108 </layout> 109 <filter type="log4net.Filter.LevelRangeFilter"> 110 <param name="LevelMin" value="WARN" /> 111 <param name="LevelMax" value="FATAL" /> 112 </filter> 113 </appender> 114 115 <!-- C6操作日志 --> 116 <appender name="C6LogFileAppenderInfo" type="log4net.Appender.RollingFileAppender"> 117 <param name="File" value="LogEvent//C6//Info//Log_"/> 118 <param name="AppendToFile" value="true"/> 119 <datePattern value="yyyy-MM-dd".txt""/> 120 <param name="RollingStyle" value="Date"/> 121 <param name="StaticLogFileName" value="false"/> 122 <layout type="log4net.Layout.PatternLayout"> 123 <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - 日志级别:%-5level %message %newline %newline"/> 124 </layout> 125 <filter type="log4net.Filter.LevelRangeFilter"> 126 <param name="LevelMin" value="DEBUG" /> 127 <param name="LevelMax" value="INFO" /> 128 </filter> 129 </appender> 130 131 <!-- C6错误日志 --> 132 <appender name="C6LogFileAppenderError" type="log4net.Appender.RollingFileAppender"> 133 <param name="File" value="LogEvent//C6//Error//Log_"/> 134 <param name="AppendToFile" value="true"/> 135 <datePattern value="yyyy-MM-dd".txt""/> 136 <param name="RollingStyle" value="Date"/> 137 <param name="StaticLogFileName" value="false"/> 138 <layout type="log4net.Layout.PatternLayout"> 139 <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - 日志级别:%-5level %message %newline %newline"/> 140 </layout> 141 <filter type="log4net.Filter.LevelRangeFilter"> 142 <param name="LevelMin" value="WARN" /> 143 <param name="LevelMax" value="FATAL" /> 144 </filter> 145 </appender> 146 147 <logger name="cmcTools.Web"> 148 <level value="ALL"/> 149 <appender-ref ref="SysLogFileAppender"/> 150 </logger> 151 152 <logger name="cmcTools.Web.C7"> 153 <level value="ALL"/> 154 <appender-ref ref="C7LogFileAppenderInfo"/> 155 <appender-ref ref="C7LogFileAppenderError"/> 156 </logger> 157 158 <logger name="cmcTools.Web.SL"> 159 <level value="ALL"/> 160 <appender-ref ref="SLLogFileAppenderInfo"/> 161 <appender-ref ref="SLLogFileAppenderError"/> 162 </logger> 163 164 165 <logger name="cmcTools.Web.CheckCIIS"> 166 <level value="ALL"/> 167 <appender-ref ref="CheckCIISLogFileAppenderInfo"/> 168 <appender-ref ref="CheckCIISLogFileAppenderError"/> 169 </logger> 170 171 172 <logger name="cmcTools.Web.C6"> 173 <level value="ALL"/> 174 <appender-ref ref="C6LogFileAppenderInfo"/> 175 <appender-ref ref="C6LogFileAppenderError"/> 176 </logger> 177 </log4net>
注意第三行: <root><level value="ALL"/> </root>,不能在加其它类型,否则会输出所有模块的日志
在代码中:
View Code
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using log4net; 6 using cmcTools.CommonLibrary.Logn4et; 7 8 namespace cmcTools.CommonLibrary 9 { 10 11 /// <summary> 12 /// 用于记录员工的变更信息状态 13 /// </summary> 14 public class Log4netHelper 15 { 16 private static log4net.ILog sysLog4net;//用于记录相关操作的日志 17 private static log4net.ILog c7Log4net; 18 private static log4net.ILog slLog4net; 19 private static log4net.ILog iisLog4net; 20 private static log4net.ILog c6Log4net; 21 22 static Log4netHelper() 23 { 24 sysLog4net = LogManager.GetLogger("cmcTools.Web"); //创建日志 25 c7Log4net = LogManager.GetLogger("cmcTools.Web.C7"); 26 slLog4net = LogManager.GetLogger("cmcTools.Web.SL"); 27 iisLog4net = LogManager.GetLogger("cmcTools.Web.CheckCIIS"); 28 c6Log4net = LogManager.GetLogger("cmcTools.Web.C6"); 29 30 } 31 32 public static void Info(string _info) 33 { 34 log4netInfo(LogerTypeEnum.Base, _info); 35 } 36 37 38 public static void Info(LogerTypeEnum logerType, string _info) 39 { 40 log4netInfo(logerType, _info); 41 } 42 43 /// <summary> 44 /// 记录关联或解除员工的操作日志的信息 45 /// </summary> 46 public static void Error(Exception ex) 47 { 48 Error(LogerTypeEnum.Base, ex); 49 } 50 51 /// <summary> 52 /// 记录关联或解除员工的操作日志的信息 53 /// </summary> 54 public static void Error(LogerTypeEnum logerType, Exception ex) 55 { 56 Error(logerType, ex, "发生异常"); 57 } 58 59 /// <summary> 60 /// 记录关联或解除员工的操作日志的信息 61 /// </summary> 62 public static void Error(LogerTypeEnum logerType, string message) 63 { 64 Error(logerType, message, "发生异常"); 65 } 66 67 /// <summary> 68 /// 记录关联或解除员工的操作日志的信息 69 /// </summary> 70 public static void Error(LogerTypeEnum logerType, Exception ex, string errorName) 71 { 72 string message = string.Format("出错类型:{0}\t {1}: {2} {3}", logerType.ToString(), errorName, ex.StackTrace, ex.Message); 73 log4netError(logerType, message); 74 } 75 76 /// <summary> 77 /// 记录关联或解除员工的操作日志的信息 78 /// </summary> 79 public static void Error(LogerTypeEnum logerType, string messageInfo, string errorName) 80 { 81 string message = string.Format("出错类型:{0}\t {1}: {2} ", logerType.ToString(), errorName, messageInfo); 82 log4netInfo(logerType, message); 83 } 84 85 86 87 88 static void log4netInfo(LogerTypeEnum logerType, string message) 89 { 90 switch (logerType) 91 { 92 case LogerTypeEnum.Base: 93 sysLog4net.Info(message); 94 break; 95 case LogerTypeEnum.C7: 96 c7Log4net.Info(message); 97 break; 98 case LogerTypeEnum.C6_L: 99 c6Log4net.Info(message); 100 break; 101 case LogerTypeEnum.ForCIIS: 102 iisLog4net.Info(message); 103 break; 104 case LogerTypeEnum.SL: 105 slLog4net.Info(message); 106 break; 107 108 } 109 } 110 static void log4netError(LogerTypeEnum logerType, string message) 111 { 112 switch (logerType) 113 { 114 case LogerTypeEnum.Base: 115 sysLog4net.Error(message); 116 break; 117 case LogerTypeEnum.C7: 118 c7Log4net.Error(message); 119 break; 120 case LogerTypeEnum.C6_L: 121 c6Log4net.Error(message); 122 break; 123 case LogerTypeEnum.ForCIIS: 124 iisLog4net.Error(message); 125 break; 126 case LogerTypeEnum.SL: 127 slLog4net.Error(message); 128 break; 129 130 } 131 } 132 } 133 }
这样日志就实际调用时:
/// <summary> /// 文本文件下载 /// </summary> /// <param name="filepath"></param> /// <param name="logerEnum"></param> /// <param name="callProcess"></param> public static void DownFile(string filepath, LogerTypeEnum logerEnum, Action<string> actProcessComplete, Func<bool> actProcessBefore) { if (actProcessBefore != null) { var result = actProcessBefore(); if (!result) { //HttpContext.Current.Response.End(); return; } } string extName = IoHelper.GetExtension(filepath).Remove(0, 1);//去除. string errorInfo = string.Empty; try { if (File.Exists(filepath)) { string fileName = System.IO.Path.GetFileName(filepath); System.IO.FileStream fs = new System.IO.FileStream(filepath, System.IO.FileMode.Open, System.IO.FileAccess.Read, FileShare.ReadWrite); if (fs.Length > 0) { byte[] bytes = new byte[(int)fs.Length]; fs.Read(bytes, 0, bytes.Length); fs.Close(); HttpContext.Current.Response.ContentType = "application/octet-stream"; HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8)); HttpContext.Current.Response.BinaryWrite(bytes); HttpContext.Current.Response.Flush(); //HttpContext.Current.ApplicationInstance.CompleteRequest(); } else { errorInfo = "文件没有数据,请重试"; } } else { errorInfo = "数据文件(" + extName + ")不存在,不能下载"; } } catch (Exception ex) { Log4netHelper.Error(logerEnum, ex, "导出" + extName + "文件异常 "); } finally { if (!string.IsNullOrEmpty(errorInfo) && actProcessComplete != null) { actProcessComplete(errorInfo); } else { HttpContext.Current.Response.End(); } } }

浙公网安备 33010602011771号