Log4net

简单明了:分6步来使用log4net组件

1,项目添加引用log4net.dll,只引用这个dll就ok

2,using Log4net命名空间

3,检查项目属性框架是否和引入的log4net.dll的版本一致。

否则会包未能加载程序集的错误。一般我们用FRAMEWORK4.0,而非4.0profile。

4,配置文件

  不论哪种项目都可以加config文件,配置文件分4块。

    4.1在configuration节点内,2种方式

1   <configSections>
2     <section name="log4net" type="System.Configuration.IgnoreSectionHandler">
3     </section>
4     <!--<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net">第二种方式-->
配置文件第一步

    4.2在configuration节点定义log4net,log4net节点内定义appender,每个appender,日志对应一种输出方式。

         输出到文本

   输出到数据库 

         输出到控制台

         当然还有其他输出位置,但是没有用到,先列出来。

 1 具体说来有如下Appender:
 2 AdoNetAppender:利用ADO.NET记录到数据库的日志。
 3 AnsiColorTerminalAppender:在ANSI 窗口终端写下高亮度的日志事件。
 4 AspNetTraceAppender:能用asp.net中Trace的方式查看记录的日志。
 5 BufferingForwardingAppender:在输出到子Appenders之前先缓存日志事件。
 6 ConsoleAppender:将日志输出到控制台。
 7 EventLogAppender:将日志写到Windows Event Log.
 8 FileAppender:将日志写到文件中。
 9 LocalSyslogAppender:将日志写到local syslog service (仅用于UNIX环境下).
10 MemoryAppender:将日志存到内存缓冲区。
11 NetSendAppender:将日志输出到Windows Messenger service.这些日志信息将在用户终端的对话框中显示。
12 RemoteSyslogAppender:通过UDP网络协议将日志写到Remote syslog service。
13 RemotingAppender:通过.NET Remoting将日志写到远程接收端。
14 RollingFileAppender:将日志以回滚文件的形式写到文件中。
15 SmtpAppender:将日志写到邮件中。
16 TraceAppender:将日志写到.NET trace 系统。
17 UdpAppender:将日志connectionless UDP datagrams的形式送到远程宿主或以UdpClient的形式广播。
日志输出方式

   

    <!--定义输出到文件中-->
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender">
      <!--定义文件存放位置-->
      <file value="D:/log4netfile.txt"/>
      <appendToFile value="true"/>
      <rollingStyle value="Date"/>
      <datePattern value="yyyyMMdd-HH:mm:ss"/>
      <layout type="log4net.Layout.PatternLayout">
        <!--每条日志末尾的文字说明-->
        <footer value="by 周公"/>
        <!--输出格式-->
        <!--样例:2008-03-26 13:42:32,111 [10] INFO  Log4NetDemo.MainClass [(null)] - info-->
        <conversionPattern value="记录时间:%date 线程ID:[%thread] 日志级别:%-5level 出错类:%logger property:[%property{NDC}] - 错误描述:%message%newline"/>
      </layout>
    </appender>
    <!--定义输出到控制台命令行中-->
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline"/>
      </layout>
    </appender>
    <!--定义输出到数据库中,这里举例输出到Access数据库中,数据库为C盘的log4net.mdb-->
    <appender name="AdoNetAppender_Access" type="log4net.Appender.AdoNetAppender">
      <connectionString value="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:log4net.mdb"/>
      <commandText value="INSERT INTO LogDetails ([LogDate],[Thread],[Level],[Logger],[Message]) VALUES (@logDate, @thread, @logLevel, @logger,@message)"/>
      <!--定义各个参数-->
      <parameter>
        <parameterName value="@logDate"/>
        <dbType value="String"/>
        <size value="240"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%date"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@thread"/>
        <dbType value="String"/>
        <size value="240"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%thread"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logLevel"/>
        <dbType value="String"/>
        <size value="240"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%level"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@logger"/>
        <dbType value="String"/>
        <size value="240"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%logger"/>
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@message"/>
        <dbType value="String"/>
        <size value="240"/>
        <layout type="log4net.Layout.PatternLayout">
          <conversionPattern value="%message"/>
        </layout>
      </parameter>
    </appender>
输出方式appender,其他输出方式自己理解后,自己很容易就能查找

  4.3在log4net节点定义root,在root节点下,每appender对应一个appender-ref,想同时多种方式记录日志,就写多个appender-ref,当然还要   对应appender

 1     <root>
 2       <!--文件形式记录日志-->
 3       <appender-ref ref="LogFileAppender"/>
 4       <!--控制台控制显示日志-->
 5       <appender-ref ref="ConsoleAppender"/>
 6       <!--Windows事件日志-->
 7       <appender-ref ref="EventLogAppender"/>
 8       <!-- 如果不启用相应的日志记录,可以通过这种方式注释掉
 9       <appender-ref ref="AdoNetAppender_Access" />
10       -->
11     </root>
log4net节点下root节点下appender-ref

       4.4 在log4net节点外,</configuration>节点内定义startup节点。

1 <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
startup

5,开始监视。

   举2种:控制台和web。控制台需要加标签,WEB在global文件中app_start内加。都表示一开始运行程序就开始运行log4net记录

     5.1控制台监视,在主函数命名空间前面加标签。2种标签

1 [assembly: log4net.Config.XmlConfigurator(ConfigFileExtension = "config", Watch = true)]
2 //[assembly: log4net.Config.XmlConfigurator(Watch = true)]   与上面一样
控制台的2种标签

    5.2 WEB

1   void Application_Start(object sender, EventArgs e)
2         {
3             // 在应用程序启动时运行的代码   
4            log4net.Config.XmlConfigurator.Configure();            
5         }
global

6,程序运行时

通过反射,获取Ilog实例,点出其方法,debug info error warn fatal,一般只用一个方法就可以了,用哪个方法,日志会对应配置文件中的appender的layout节点中的%level现实对应的信息等级。

个人认为:哪里出的异常非常严重就用fatal  觉得是错误用error  一般我们用info就行。

   ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);//通过反射方式

   ILog log = log4net.LogManager.GetLogger(typeof(当前类名));//通过反射方式
log实例

记录:

1  log.Error("error", new Exception("错误"));
2             //记录严重错误
3             log.Fatal("fatal", new Exception("致命错误"));
4             //记录一般信息
5             log.Info("info", new Exception("信息"));
6             //记录调试信息
7             log.Debug("debug", new Exception("调试信息"));
8             //记录警告
9             log.Warn("warn", new Exception("警告"));
5个等级

一般在WEB中,我们为了方便使用,监视开始后,不用在每个类(页面)中获取Ilog对象,在写记录。

我们一般写个Log4netHelper类,做好这两个功能(1获取实例,静态封装等级方法),在页面直接调用封装好的静态方法。

1  public class LogHelper
2     {
3         private LogHelper() { }
4 
5         public static readonly log4net.ILog loginfo = log4net.LogManager.GetLogger("loginfo"); //此处没有获取type of 当前类    public static void WriteLog(string info)
6         {
7             loginfo.Info(info);
8         }
9      }
Log4netHelper
1   public class Log4netHelper
2     {
3        public static void WriteLog(Type type, string ex)
4         {
5         log4net.ILog log = log4net.LogManager.GetLogger(type);
6            log.info(ex);
7          }
8     }
Log4netHelper

①这里多多赘述一下

常用写入文本中的2种方式。appender中的节点配置。

1,按日期生成文本

1 <param name="File" value="Logs\LogInfo\" />
2       <param name="AppendToFile" value="true" />
3       <!--param name="MaxFileSize" value="50MB" /-->
4       <param name="MaxSizeRollBackups" value="100" />
5       <param name="StaticLogFileName" value="false" />
6       <param name="DatePattern" value="yyyyMMdd" />
7       <param name="RollingStyle" value="Date" />
8       <param name="lockingModel"  type="log4net.Appender.FileAppender+MinimalLock" />
日期生成文本 appender参数

工作项目的截图

2,按文本大小,个数生成

<file value=""/>
<appenderToFile value="true"/>
<maxSizeRollBackups value="10">   最多生成10个文件
<maximumFileSize value="1024KB"/> 每个文件最大1M
<rollingStyle value="Size"/> 按文件大小
<staticLogFileName value="true"/> 文件名不变
按文件大小生成个数

当第一个file.txt够1M时,会自动生成file1.txt,将file.txt文件内容剪切到file1.txt中,这样file.txt文件空了,会继续记录。够1M时,会自动生成file2.txt,剪切到file2.txt中,还是在file.txt中记录。 

②有关appender中的layout的参数意义

 1 关于使用log4net中可能会使用到的一些参数
 2 %m(message):输出的日志消息,如ILog.Debug(…)输出的一条消息
 3 %n(new line):换行
 4 %d(datetime):输出当前语句运行的时刻
 5 %r(run time):输出程序从运行到执行到当前语句时消耗的毫秒数
 6 %t(thread id):当前语句所在的线程ID
 7 %p(priority): 日志的当前优先级别,即DEBUG、INFO、WARN…等
 8 %c(class):当前日志对象的名称,例如:
 9 %f(file):输出语句所在的文件名。
10 %l(line):输出语句所在的行号。
11 %数字:表示该项的最小长度,如果不够,则用空格填充,如“%-5level”表示level的最小宽度是5个字符,如果实际长度不够5个字符则以空格填充。
12 下面以一个实际的例子来说明问题,比如在配置中有“%date [%thread] (%file:%line) %-5level %logger [%property{NDC}] - %message%newline”,那么实际的日志中会是如下格式:
13 “记录时间:2010-11-17 16:16:36,561 线程ID:[9] 日志级别:文件:所在行ERROR 出错类:Log4NetDemo.Program property:[(null)] - 错误描述:error
14 System.Exception: 在这里发生了一个异常,Error Number:2036084948
appender中的layout参数意义

③借鉴文章

http://logging.apache.org/log4net/release/manual/configuration.html  log4net官网

   http://www.cnblogs.com/dragon/archive/2005/03/24/124254.html周金桥

     http://zhoufoxcn.blog.51cto.com/792419/429988/   周金桥

     http://www.cnblogs.com/wangsaiming/archive/2013/01/11/2856253.html  柄棋先生

原文地址:https://www.cnblogs.com/leee/p/4473913.html