.net 簡單實用Log4net
阿新 • • 發佈:2018-12-20
開發工具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="View CodeALL" /> <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=""Logs_"yyyyMMdd".txt"" /> <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>
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目錄下】