將Error異常日志從普通日志中剝離


  開發過程中經常需要調試和線上環境查看異常日志的需求,但普通消息與異常消息混在一起實在是非常難得找,上則NM的文檔夠你頭痛,所以就將Error級別的日志抽離出來。

  本示例采用log4net來配置:

  1、先配置web.config,添加:

<configSections>
    <!-- 添加log4net配置節 -->
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"></section>
  </configSections>

  2、在<configuration>直接下級添加:

<log4net>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="Log/" />
      <param name="AppendToFile" value="true" />
      <param name="MaxSizeRollBackups" value="10" />
      <param name="StaticLogFileName" value="false" />
      <param name="DatePattern" value="yyyy-MM-dd'.txt'" />
      <param name="RollingStyle" value="Date" />
      <layout type="log4net.Layout.PatternLayout">
        <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss:fff} [%thread] %-5level %logger %ndc - %message%newline" />
      </layout>
    </appender>
    <appender name="ErrorLogAppender" type="log4net.Appender.RollingFileAppender">
      <param name="File" value="Log/" />
      <param name="AppendToFile" value="true" />
      <param name="MaxSizeRollBackups" value="10" />
      <param name="StaticLogFileName" value="false" />
      <param name="DatePattern" value="yyyy-MM-dd'-error.txt'" />
      <param name="RollingStyle" value="Date" />
      <layout type="log4net.Layout.PatternLayout">
        <!--輸出格式-->
        <param name="ConversionPattern" value="%date 線程ID:[%thread] 日志級別:%-5level 出錯類:%logger property:[%property{NDC}] - 錯誤描述:%message%newline" />
      </layout>
    </appender>
    <root>
      <!--(高) OFF > FATAL > ERROR > WARN > INFO > DEBUG > ALL (低) -->
      <level value="INFO" />
      <appender-ref ref="RollingLogFileAppender" />
      <level value="ERROR" />
      <appender-ref ref="ErrorLogAppender" />
    </root>

<logger additivity="true" name="InfoLog">
<level value="INFO" />
<appender-ref ref="RollingLogFileAppender" />
</logger>
<logger additivity="true" name="ErrorLog">
<level value="ERROR" />
<appender-ref ref="ErrorLogAppender" />
</logger>

  </log4net>

  注意高亮處

  InfoLog中配置 INFO ,只記錄INFO

  ErrorLog中 <level value="ERROR" /> 從ERROR級別開始。

  這樣就可以將ERROR抽離出來。

  3、定義日志類LogHelper

 public static class LogHelper
    {
        static ILog _logdebug = LogManager.GetLogger("Debug");
        static ILog _loginfo = LogManager.GetLogger("InfoLog");
        static ILog _logwarn = LogManager.GetLogger("Warn");
        static ILog _logerror = LogManager.GetLogger("ErrorLog");
        static ILog _logfatal = LogManager.GetLogger("Fatal");
        static LogHelper()
        {
            log4net.Config.XmlConfigurator.Configure();
        }

        public static void Info(string msg)
        {
            _loginfo.Info(msg);
        }

        public static void Warn(string msg)
        {
            _logwarn.Warn(msg);
        }

        public static void Error(string msg)
        {
            _logerror.Error(msg);
        }
        public static void Error(string errtitle, Exception ex)
        {
            _logerror.Error(errtitle, ex);
        }
        public static void Fatal(string msg)
        {
            _logfatal.Fatal(msg);
        }
    }

  4、使用

LogHelper.Info("內容不正確");
LogHelper.Error("Post方法運行錯誤", ex);

最終會出現兩個文件且error記錄都在error中info中無error記錄:

 

========================這是個害羞的分割線============================

后面經過測試發現按照之前的配置Info信息被過濾掉了,只生成了普通日志文件,但內容為空,因此配置有問題,改配置。

去掉兩個append中的 filter。

去掉root中的內容。

添加兩個logger。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM