zoukankan      html  css  js  c++  java
  • 记录Log4Net的使用

    最近项目中有一个记录错误日志的功能模块,以前采用的是写TXT的做法。代码如下

     /// <summary>
            /// 写入日志
            /// </summary>
            public static void SetExceptionLog() {
                //创建目录
                if (!Directory.Exists(LogPath)) {
                    Directory.CreateDirectory(LogPath);
                }
                if (!Directory.Exists(Path.Combine(Models.ExceptionLog.LogPath, DateTime.Now.ToString("MM-dd"))))
                {
                    Directory.CreateDirectory(Path.Combine(Models.ExceptionLog.LogPath, DateTime.Now.ToString("MM-dd")));
                }
               WebException webexception=QueueException.Dequeue();
               var UserLoginPath = System.IO.Path.Combine(LogPath, DateTime.Now.ToString("MM-dd"), webexception.Host+".txt");
               string Content = string.Format("
    {0}报错,报错内容{1}"+"
    "+"=======================================================================================",webexception.datatime,webexception.exception.ToString());
               System.IO.File.AppendAllText(UserLoginPath,Content,System.Text.Encoding.UTF8);
            }
    

    这样写固然可以解决需求问题,但是“写日志”的方法就固定死了,往后要改很不方便,于是就用到了Log4Net。

    本文使用方法参考周公的日志:http://blog.csdn.net/zhoufoxcn/article/details/2220533

    下面开始介绍使用:

      1:下载Log4Net:http://logging.apache.org/log4net/download_log4net.cgi

      2:找到适合自己.NET框架的Log4Net组件

      

         3:项目中引用log4net.dll

       4:配置config文件(WinForm对应的是*.exe.config,WebForm对应的是*.config)

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
      <configSections>
        <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
      </configSections>
      <appSettings>
      </appSettings>
      <log4net>
        <!--定义输出到文件中-->
        <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>
        <!--定义输出到windows事件中-->
        <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
          <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>
        <!--定义日志的输出媒介,下面定义日志以四种方式输出。也可以下面的按照一种类型或其他类型输出。-->
        <root>
          <!--文件形式记录日志-->
          <appender-ref ref="LogFileAppender" />
          <!--控制台控制显示日志-->
          <appender-ref ref="ConsoleAppender" />
          <!--Windows事件日志-->
          <appender-ref ref="EventLogAppender" />
          <!-- 如果不启用相应的日志记录,可以通过这种方式注释掉
          <appender-ref ref="AdoNetAppender_Access" />
          -->
        </root>
        
      </log4net>
    </configuration>

      5:在项目第一次启动的时候加载配置,如果项目是WEB,那么就在Global.asax中的Application_Start方法中加入

      //注册Log4Net
      log4net.Config.XmlConfigurator.Configure();
    

      6:在异常的地方写入日志

        //创建日志记录组件实例
        ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
        //记录错误日志
        log.Error("error",new Exception("发生了一个异常"));
        //记录严重错误
        log.Fatal("fatal",new Exception("发生了一个致命错误"));
        //记录一般信息
        log.Info("info");
        //记录调试信息
        log.Debug("debug");
        //记录警告信息
        log.Warn("warn");    
    

      项目中修改后的代码如下:

         
         private static ILog log = log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
         /// <summary> /// 写入日志 /// </summary> public static void SetExceptionLog() { WebException webexception=QueueException.Dequeue(); log.Error(webexception.exception.ToString()); }

      看看错误记录的日志

    好了,大功告成、

  • 相关阅读:
    iOS $299刀企业证书申请的过程以及细节补充
    关于移动开发的一些想法和认识--Android和iOS
    iOS设备的越狱方法
    iOS越狱开发(一)
    iOS开发中 workspace 与 static lib 工程的联合使用
    高效 Java Web 开发框架 JessMA v3.5.1
    跨平台日志清理工具 Log-Cutter v2.0.1 正式发布
    【新年呈献】高性能网络通信框架 HP-Socket v5.7.1
    高性能网络通信框架 HP-Socket v5.2.1
    跨年呈献:HP-Socket for Linux 1.0 震撼发布
  • 原文地址:https://www.cnblogs.com/dazhuangtage/p/5229866.html
Copyright © 2011-2022 走看看