Log4net使用探究

第一步:

通过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="Logs\Error" />
 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="Logs\Fatal" />
 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="Logs\Error" />
 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="Logs\Warn" />
 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="Logs\Debug" />
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="Logs\Info" />
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属性必须指定

 

更多需要参考资料:

Apache Log4net 官方文档建议通读 

csdn博友文章

 

posted @ 2017-08-14 17:15  anekos  阅读(220)  评论(0编辑  收藏  举报