第一步:
通过Nuget package 搜索Apache Log4net安装
第二步:
在项目Global.asax文件中添加读取 配置文件
第三步:
编写Loghelper 文件
1 public class LogNetHelper 2 { 3 private static ILog iLog { get; set; } 4 //默认Info等级 5 public static void Write(string message) 6 { 7 SetLogLevel(LogLevel.Info, null).Info(message); 8 } 9 //自定义 10 public static ILog GetInstance(LogLevel level) 11 { 12 return SetLogLevel(level,null); 13 } 14 //是否需要重新加载配置文件使用 15 private static ILog GetIlog(string configPath,string typeStr) 16 { 17 if (string.IsNullOrEmpty(configPath)) 18 { 19 iLog = log4net.LogManager.GetLogger(typeStr); 20 } 21 else 22 { 23 iLog = log4net.LogManager.GetLogger(typeStr); 24 log4net.Config.XmlConfigurator.Configure(new FileInfo(configPath)); 25 } 26 return iLog; 27 } 28 //封装变化 29 private static ILog SetLogLevel(LogLevel level, string configPath) 30 { 31 ILog log; 32 switch (level) 33 { 34 case LogLevel.Fatal: 35 log = GetIlog(configPath, LogLevel.Fatal.ToString()); 36 break; 37 case LogLevel.Error: 38 log = GetIlog(configPath, LogLevel.Error.ToString()); 39 break; 40 case LogLevel.Warn: 41 log = GetIlog(configPath, LogLevel.Warn.ToString()); 42 break; 43 case LogLevel.Debug: 44 log = GetIlog(configPath, LogLevel.Debug.ToString()); 45 break; 46 case LogLevel.Info: 47 log = GetIlog(configPath, LogLevel.Info.ToString()); 48 break; 49 default: 50 log = GetIlog(configPath, LogLevel.Info.ToString()); 51 break; 52 } 53 return log; 54 } 55 56 } 57 //日志等级 58 public enum LogLevel 59 { 60 Fatal, 61 Error, 62 Warn, 63 Debug, 64 Info 65 } 66 67 }
第四步:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <log4net debug="false"> 3 4 <!--按日期分割日志文件 一天一个--> 5 <appender name="LogFileAppenderByDate" type="log4net.Appender.RollingFileAppender" > 6 7 <!--是否续写--> 8 <param name="AppendToFile" value="true" /> 9 <!--最小锁定模型以允许多个进程可以写入同一个文件--> 10 <param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" /> 11 <param name="StaticLogFileName" value="true" /> 12 <!--保存路径--> 13 <param name="File" value="LogsError" /> 14 <param name="DatePattern" value="yyyy-MM-dd.LOG" /> 15 <param name="StaticLogFileName" value="false" /> 16 <param name="RollingStyle" value="Date" /> 17 <layout type="log4net.Layout.PatternLayout"> 18 <param name="ConversionPattern" value="时间:%d %n级别:%level %n类名:%c%n文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" /> 19 </layout> 20 </appender> 21 22 <!--按日志容量分割日志文件 10KB一个--> 23 <appender name="LogFileAppenderBySize" type="log4net.Appender.RollingFileAppender" > 24 <!--是否续写--> 25 <param name="AppendToFile" value="true" /> 26 <!--最小锁定模型以允许多个进程可以写入同一个文件--> 27 <param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" /> 28 29 <param name="StaticLogFileName" value="true" /> 30 31 <!--按照文件的大小进行变换日志文件--> 32 <param name="RollingStyle" value="Size" /> 33 <param name="File" value="log.txt" /> 34 <!--单个文件最大数量 好像只有在 按Size分割时有效--> 35 <param name="MaximumFileSize" value="200KB"/> 36 <!--保留的log文件数量 超过此数量后 自动删除之前的 好像只有在 按Size分割时有效--> 37 <param name="MaxSizeRollBackups" value="2" /> 38 39 <param name="StaticLogFileName" value="false" /> 40 <layout type="log4net.Layout.PatternLayout"> 41 <param name="ConversionPattern" value="发生时间:%d %n事件级别:%level %n相关类名:%c%n程序文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" /> 42 </layout> 43 </appender> 44 45 <!--按等级文件夹日志文件 一天一个--> 46 <appender name="Fatal" type="log4net.Appender.RollingFileAppender" > 47 48 <!--是否续写--> 49 <param name="AppendToFile" value="true" /> 50 <!--最小锁定模型以允许多个进程可以写入同一个文件--> 51 <param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" /> 52 <param name="StaticLogFileName" value="true" /> 53 <!--保存路径--> 54 <param name="File" value="LogsFatal" /> 55 <param name="DatePattern" value="yyyy-MM-dd.LOG" /> 56 <param name="StaticLogFileName" value="false" /> 57 <param name="RollingStyle" value="Date" /> 58 <layout type="log4net.Layout.PatternLayout"> 59 <param name="ConversionPattern" value="时间:%d %n级别:%level %n类名:%c%n文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" /> 60 </layout> 61 <filter type="log4net.Filter.LoggerMatchFilter"> 62 <loggerToMatch value="Fatal" /> 63 </filter> 64 <filter type="log4net.Filter.DenyAllFilter" /> 65 </appender> 66 67 <!--按等级文件夹日志文件 一天一个--> 68 <appender name="Error" type="log4net.Appender.RollingFileAppender" > 69 70 <!--是否续写--> 71 <param name="AppendToFile" value="true" /> 72 <!--最小锁定模型以允许多个进程可以写入同一个文件--> 73 <param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" /> 74 <param name="StaticLogFileName" value="true" /> 75 <!--保存路径--> 76 <param name="File" value="LogsError" /> 77 <param name="DatePattern" value="yyyy-MM-dd.LOG" /> 78 <param name="StaticLogFileName" value="false" /> 79 <param name="RollingStyle" value="Date" /> 80 <layout type="log4net.Layout.PatternLayout"> 81 <param name="ConversionPattern" value="时间:%d %n级别:%level %n类名:%c%n文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" /> 82 </layout> 83 <filter type="log4net.Filter.LoggerMatchFilter"> 84 <loggerToMatch value="Error" /> 85 </filter> 86 <filter type="log4net.Filter.DenyAllFilter" /> 87 </appender> 88 89 <!--按等级文件夹日志文件 一天一个--> 90 <appender name="Warn" type="log4net.Appender.RollingFileAppender" > 91 92 <!--是否续写--> 93 <param name="AppendToFile" value="true" /> 94 <!--最小锁定模型以允许多个进程可以写入同一个文件--> 95 <param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" /> 96 <param name="StaticLogFileName" value="true" /> 97 <!--保存路径--> 98 <param name="File" value="LogsWarn" /> 99 <param name="DatePattern" value="yyyy-MM-dd.LOG" /> 100 <param name="StaticLogFileName" value="false" /> 101 <param name="RollingStyle" value="Date" /> 102 <layout type="log4net.Layout.PatternLayout"> 103 <param name="ConversionPattern" value="时间:%d %n级别:%level %n类名:%c%n文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" /> 104 </layout> 105 <filter type="log4net.Filter.LoggerMatchFilter"> 106 <loggerToMatch value="Warn" /> 107 </filter> 108 <filter type="log4net.Filter.DenyAllFilter" /> 109 </appender> 110 111 <!--按等级文件夹日志文件 一天一个--> 112 <appender name="Debug" type="log4net.Appender.RollingFileAppender" > 113 114 <!--是否续写--> 115 <param name="AppendToFile" value="true" /> 116 <!--最小锁定模型以允许多个进程可以写入同一个文件--> 117 <param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" /> 118 <param name="StaticLogFileName" value="true" /> 119 <!--保存路径--> 120 <param name="File" value="LogsDebug" /> 121 <param name="DatePattern" value="yyyy-MM-dd.LOG" /> 122 <param name="StaticLogFileName" value="false" /> 123 <param name="RollingStyle" value="Date" /> 124 <layout type="log4net.Layout.PatternLayout"> 125 <param name="ConversionPattern" value="时间:%d %n级别:%level %n类名:%c%n文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" /> 126 </layout> 127 <filter type="log4net.Filter.LoggerMatchFilter"> 128 <loggerToMatch value="Debug" /> 129 </filter> 130 <filter type="log4net.Filter.DenyAllFilter" /> 131 </appender> 132 133 <!--按等级文件夹日志文件 一天一个--> 134 <appender name="Info" type="log4net.Appender.RollingFileAppender" > 135 136 <!--是否续写--> 137 <param name="AppendToFile" value="true" /> 138 <!--最小锁定模型以允许多个进程可以写入同一个文件--> 139 <param name="LockingModel" value="log4net.Appender.FileAppender.MinimalLock" /> 140 <param name="StaticLogFileName" value="true" /> 141 <!--保存路径--> 142 <param name="File" value="LogsInfo" /> 143 <param name="DatePattern" value="yyyy-MM-dd.LOG" /> 144 <param name="StaticLogFileName" value="false" /> 145 <param name="RollingStyle" value="Date" /> 146 <layout type="log4net.Layout.PatternLayout"> 147 <param name="ConversionPattern" value="时间:%d %n级别:%level %n类名:%c%n文件:%F 第%L行%n日志内容:%m%n-----------------------------------------%n%n" /> 148 </layout> 149 <filter type="log4net.Filter.LoggerMatchFilter"> 150 <loggerToMatch value="Info" /> 151 </filter> 152 <filter type="log4net.Filter.DenyAllFilter" /> 153 </appender> 154 155 156 157 158 159 160 161 <root> 162 <level value="ALL" /> 163 <!--启用按等级文件夹分割--> 164 <appender-ref ref="Fatal" /> 165 <appender-ref ref="Error" /> 166 <appender-ref ref="Warn" /> 167 <appender-ref ref="Debug" /> 168 <appender-ref ref="Info" /> 169 170 <!--启用按日期分割--> 171 <!--<appender-ref ref="LogFileAppenderByDate" />--> 172 173 <!--启用按容量分割--> 174 <!--<appender-ref ref="LogFileAppenderBySize" />--> 175 <!--启用保存到数据库--> 176 <!--<appender-ref ref="AdoNetAppender" />--> 177 </root> 178 179 </log4net>
<root> 实际上就是一个根logger,所有其它logger都默认继承它,
- appender-ref 零个或多个 需要引用的appender
- level 记录级别
<appender> 定义日志的输出方式 name属性必须唯一,type属性必须指定
<layout> 日志布局,type属性必须指定
<filter> 过滤器,type属性必须指定
更多需要参考资料: