zoukankan      html  css  js  c++  java
  • 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  柄棋先生

  • 相关阅读:
    高级搜索
    Hibernate通过什么方法可以把私有成员变量赋值成数据库查询到的值然后返回POJO对象呢?
    hibernate继承关系映射和java反射机制的运用
    eclipse启动停止--jdk环境变量配置
    visual studio 正则表达式 查找 替换
    常用正则表达式
    解决兼容的方法!
    JS的定时器和JS的执行机制
    2020年3月2日随笔
    2020年2月12日 线上笔记
  • 原文地址:https://www.cnblogs.com/leee/p/4473913.html
Copyright © 2011-2022 走看看