1. 程式人生 > >.net 簡單實用Log4net

.net 簡單實用Log4net

開發工具vs2017

【注意專案名稱不要為log4net,否者在之後配置log4net出錯】

1】NuGet中引用Log4net包

2】在web.config中新增以下兩段程式碼

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

  <!--配置log4net-->
  <log4net>
    <!-- OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->
    <!-- Set root logger level to ERROR and its appenders -->
    <root>
      <level value="
ALL" /> <appender-ref ref="SysAppender" /> </root> <!-- Print only messages of level DEBUG or above in the packages --> <logger name="WebLogger"> <level value="DEBUG" /> </logger> <appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net
"> <param name="File" value="App_Data/" /> <param name="AppendToFile" value="true" /> <param name="RollingStyle" value="Date" /> <param name="DatePattern" value="&quot;Logs_&quot;yyyyMMdd&quot;.txt&quot;" /> <param name="StaticLogFileName
" value="false" /> <layout type="log4net.Layout.PatternLayout,log4net"> <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /> </layout> </appender> <appender name="consoleApp" type="log4net.Appender.ConsoleAppender,log4net"> <layout type="log4net.Layout.PatternLayout,log4net"> <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" /> </layout> </appender> </log4net>
View Code

3】新增web配置檔案命名為log4new.config並在中寫入以下程式碼

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>

  <log4net debug="true">
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="applicationLog.log" />
      <!--file可以指定具體的路徑 eg : d:\\test.log。不指定的話log被生成在專案的bin/Debug 或者 bin/Release目錄下 (web的專案 預設生成在根目錄下)-->
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <!--備份log檔案的個數最多10個-->
      <maximumFileSize value="2MB" />
      <!--每個log檔案最大是2M,如果超過2M將重新建立一個新的log檔案,並將原來的log檔案備份。-->
      <staticLogFileName value="true" />
      <layout type="log4net.Layout.PatternLayout">
        <!--指定log的格式-->
        <conversionPattern value="[%date]  %thread -- %-5level -- %logger [%M] -- %message%newline" />
      </layout>
    </appender>

    <root>
      <level value="DEBUG" />
      <!--指定將此級別及以上的log列印到log檔案中-->
      <appender-ref ref="RollingLogFileAppender" />
    </root>
  </log4net>
</configuration>
View Code

4】在Global.asax中新增程式碼 

//配置log4
log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(Server.MapPath("~/Web.config")));
View Code

 5】寫一個 LogHelper.cs但是注意在這個.cs檔案的名稱空間寫上  [assembly: log4net.Config.XmlConfigurator(Watch = true)]

LogHelper程式碼

    public class LogHelper
    {
        //        log4j定義了8個級別的log(除去OFF和ALL,可以說分為6個級別),優先順序從高到低依次為:OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、 ALL。 
        //ALL 最低等級的,用於開啟所有日誌記錄。 
        //TRACE designates finer-grained informational events than the DEBUG.Since:1.2.12,很低的日誌級別,一般不會使用。 
        //DEBUG 指出細粒度資訊事件對除錯應用程式是非常有幫助的,主要用於開發過程中列印一些執行資訊。 
        //INFO 訊息在粗粒度級別上突出強調應用程式的執行過程。列印一些你感興趣的或者重要的資訊,這個可以用於生產環境中輸出程式執行的一些重要資訊,
        //但是不能濫用,避免列印過多的日誌。 WARN 表明會出現潛在錯誤的情形,有些資訊不是錯誤資訊,但是也要給程式設計師的一些提示。
        //ERROR 指出雖然發生錯誤事件,但仍然不影響系統的繼續執行。列印錯誤和異常資訊,如果不想輸出太多的日誌,可以使用這個級別。
        //FATAL 指出每個嚴重的錯誤事件將會導致應用程式的退出。這個級別比較高了。重大錯誤,這種級別你可以直接停止程式了。
        //OFF 最高等級的,用於關閉所有日誌記錄。
        //如果將log level設定在某一個級別上,那麼比此級別優先順序高的log都能打印出來。例如,如果設定優先順序為WARN,那麼OFF、FATAL、ERROR、WARN 4個級別的log能正常輸出,而INFO、DEBUG、TRACE、 ALL級別的log則會被忽略。Log4j建議只使用四個級別,優先順序從高到低分別是ERROR、WARN、INFO、DEBUG。

        #region INFO 訊息在粗粒度級別上突出強調應用程式的執行過程。列印一些你感興趣的或者重要的資訊,這個可以用於生產環境中輸出程式執行的一些重要資訊,
        /// <summary>
        /// 1
        /// </summary>
        /// <param name="write"></param>
        public static void Info(string write)
        {
            log4net.ILog log = log4net.LogManager.GetLogger("ValuesController");
            log.Info("日誌記錄:" + write);
        }
        public static void Info(string write, Exception ex)
        {
            log4net.ILog log = log4net.LogManager.GetLogger("ValuesController");
            log.Info("日誌記錄:" + write + "。錯誤記載:" + ex.ToString());
        }
        #endregion
        #region DEBUG 指出細粒度資訊事件對除錯應用程式是非常有幫助的,主要用於開發過程中列印一些執行資訊。 
        public static void debug(string write)
        {
            log4net.ILog log = log4net.LogManager.GetLogger("ValuesController");
            log.Debug("日誌記錄:" + write);
        }
        public static void debug(string write, Exception ex)
        {
            log4net.ILog log = log4net.LogManager.GetLogger("ValuesController");
            log.Debug("日誌記錄:" + write + "。錯誤記載:" + ex.ToString());
        }
        #endregion
        #region ERROR 指出雖然發生錯誤事件,但仍然不影響系統的繼續執行。列印錯誤和異常資訊,如果不想輸出太多的日誌,可以使用這個級別。
        public static void error(string write)
        {
            log4net.ILog log = log4net.LogManager.GetLogger("ValuesController");
            log.Error("日誌記錄:" + write);
        }
        public static void error(string write, Exception ex)
        {
            log4net.ILog log = log4net.LogManager.GetLogger("ValuesController");
            log.Error("日誌記錄:" + write + "。錯誤記載:" + ex.ToString());
        }
        #endregion
        #region FATAL 指出每個嚴重的錯誤事件將會導致應用程式的退出。這個級別比較高了。重大錯誤,這種級別你可以直接停止程式了。
        public static void fatal(string write)
        {
            log4net.ILog log = log4net.LogManager.GetLogger("ValuesController");
            log.Fatal("日誌記錄:" + write);
        }
        public static void fatal(string write, Exception ex)
        {
            log4net.ILog log = log4net.LogManager.GetLogger("ValuesController");
            log.Fatal("日誌記錄:" + write + "。錯誤記載:" + ex.ToString());
        }
        #endregion

        //定義輸出的日誌內容  自己定義格式 可以不需要
        public static string logMessage(SysLogMsg logMessage)
        {
            StringBuilder strInfo = new StringBuilder();
            strInfo.Append(" \r\n1. 錯誤: >> 操作時間: " + logMessage.OperationTime + "   操作人: " + logMessage.UserName + " \r\n");
            strInfo.Append("2. 類名: " + logMessage.Class + " \r\n");
            strInfo.Append("3. 內容: " + logMessage.Content + "\r\n");
            strInfo.Append("-----------------------------------------------------------------------------------------------------------------------------\r\n");
            return strInfo.ToString();
        }
    }
View Code

6】最後可以開始寫日誌  ,可以自己定義一種日誌格式【自己寫一個model,定義幾個引數  時間、操作人、類名等等】

 最後根據log4new.config設定的路徑找到日誌所在【未定義的話一般在專案的bin/Debug 或者 bin/Release目錄下】