上一篇, 都是從別人那裡拷過來的, 主要是介紹規則和說明的. 這一篇, 才是重點, 講實際使用. 首先介紹項目中最常用的配置文件方式. 一、log4net.config 文件方式 我習慣, 把log4net的配置, 放在一個單獨的配置文件中, 而不是放在 app.config或者web.config ...
上一篇, 都是從別人那裡拷過來的, 主要是介紹規則和說明的. 這一篇, 才是重點, 講實際使用.
首先介紹項目中最常用的配置文件方式.
一、log4net.config 文件方式
我習慣, 把log4net的配置, 放在一個單獨的配置文件中, 而不是放在 app.config或者web.config文件中, 這樣做, 雖然麻煩了一點, 但是好處就是涇渭分明, 清晰明瞭.
1. 首先要做的, 就是在 AssemblyInfo.cs 文件中, 加一句話
[assembly:log4net.Config.DOMConfigurator(Watch=true, ConfigFile="Log4net.config")]
2. 接下來, 有兩種方法, 一種是在app.config/web.config文件中加兩句話, 另一種是在程式中加一句話. 那麼先看第一種吧.
2.1 web.config
<configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" /> </configSections> <log4net configSource="log4net.config" />
與這無關的配置, 我都幹掉了. 接下來, 可以看看我的 Log4net.config文件
<?xml version="1.0" encoding="utf-8" ?> <log4net> <root> <level value="ALL" /> <appender-ref ref="ErrorLogFileAppender" /> <appender-ref ref="TraceLogFileAppender" /> </root> <!--跟蹤日誌輸出--> <appender name="TraceLogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="Logs\Trace\" /> <appendToFile value="true" /> <MaxSizeRollBackups value="20" /> <RollingStyle value="Date" /> <DatePattern value="yyyy-MM-dd'.txt'" /> <StaticLogFileName value="false" /> <layout type="log4net.Layout.PatternLayout,log4net"> <header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" /> <footer value="[END LOGGING AT %date]%newline%newline" type="log4net.Util.PatternString" /> <ConversionPattern value="%d [%t] %-5p %c - %m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter,log4net"> <levelMin value="DEBUG" /> <levelMax value="INFO" /> </filter> </appender> <!--錯誤日誌輸出--> <appender name="ErrorLogFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="Logs\Error\" /> <MaxSizeRollBackups value="20" /> <StaticLogFileName value="false" /> <DatePattern value="yyyy-MM-dd'.txt'" /> <RollingStyle value="Date" /> <appendToFile value="true" /> <layout type="log4net.Layout.PatternLayout,log4net"> <header value="[BEGIN LOGGING AT %date]%newline" type="log4net.Util.PatternString" /> <footer value="[END LOGGING AT %date]%newline%newline" type="log4net.Util.PatternString" /> <ConversionPattern value="%d [%t] %-5p %c - %m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter,log4net"> <levelMin value="ERROR" /> <levelMax value="FATAL" /> </filter> </appender> </log4net>
我在controller中, 弄了一個錯誤點, 還是把代碼貼出來吧. 清晰點
public ActionResult Index() { LogHelper.Log("trace").WriteInfo("進入HomeController/Index方法");try { int a = 0; int b = 1; var s = b / a; } catch (Exception ex) { string errorMsg = string.Format(@"後臺異常信息:【{0}】, 引發異常的方法:【{1}】, 引發異常的對象:【{2}】", ex.Message, //異常信息 ex.TargetSite.ToString(), //異常方法名 ex.Source //引發異常的對象 ); LogHelper.Log("logsys").WriteError(errorMsg); } LogHelper.Log("trace").WriteInfo("離開HomeController/Index方法"); return View(list); }
接下來看一下結果:
1). 看一下生成的目錄
這裡使用的是日期命名的方式, 每天一個文件, 還有一種, 是使用大小限制的方式, 一個文件限制比如10M, 過了10M, 會自動重新生成一個文件.
2). 看一下日誌裡面記錄的內容
這裡的例子, 用的都是最簡單的方式, 主要是介紹一下使用方法.
2.2 程式中配置的方式
public class LogHelper { static LogHelper() { XmlConfigurator.Configure(new FileInfo("Log4net.config")); } private static LogHelper _instance = null; private static ILog ILog; public static LogHelper Log(Type t) { if (_instance == null) _instance = new LogHelper(); ILog = LogManager.GetLogger(t); return _instance; } public static LogHelper Log(string sType) { if (_instance == null) _instance = new LogHelper(); ILog = LogManager.GetLogger(sType); return _instance; } /// <summary> /// 寫調試信息 /// </summary> /// <param name="msg">消息</param> public void WriteDebug(string msg) { ILog.Debug(msg); } /// <summary> /// 寫普通信息 /// </summary> /// <param name="msg">消息</param> public void WriteInfo(string msg) { ILog.Info(msg); } /// <summary> /// 寫警告信息 /// </summary> /// <param name="msg">消息</param> public void WriteWarn(string msg) { ILog.Warn(msg); } /// <summary> /// 寫錯誤信息 /// </summary> /// <param name="msg">消息</param> public void WriteError(string msg) { ILog.Error(msg); } /// <summary> /// 寫錯誤信息 /// </summary> /// <param name="msg">消息</param> /// <param name="ex">錯誤信息</param> public void WriteError(string msg, Exception ex) { ILog.Error(msg, ex); } /// <summary> /// 寫重大錯誤信息 /// </summary> /// <param name="msg">消息</param> public void WriteFatal(string msg) { ILog.Fatal(msg); } }
主要是 XmlConfigurator.Configure() 方法. config裡面app.config/web.config文件中不加配置, 加這一句話也是可以的.
看一下結果:
這裡只有Begin logging , 為啥沒有 End logging呢, 這個是logger自動加的, 會在結束的時候加上去的.