前言
公司前幾天重新確立了考核指標,主要是針對我們研發部,而我們的經理要求也高,對我們績效考核扣分也挺狠的,100分的,出了幾個嚴重bug就變0分,反正只要被用戶發現並且提出來了,就會扣分,沒被用戶發現自己解決了不追究,還沒聽說有人寫的程序能不出bug,為了能及時的知道出現bug,所以我在記錄錯誤日志的時候就將錯誤信息通過郵件發給自己,現在手機微信這么方便,來了郵件就能收到,都是考核惹的禍啊!
正題
log4Net想必很多人都知道,從java的log4j演變而來,開源的,可以到這里下載http://logging.apache.org/log4net/download_log4net.cgi
當然,現在項目中對log4net添加引用,通常都放在公共設施層。
在項目中建個log4net.config的配置文件
1 <?xml version="1.0"?> 2 <configuration> 3 <configSections> 4 <section name="log4net" type="System.Configuration.IgnoreSectionHandler"/> 5 </configSections> 6 <log4net> 7 <!--根據logger獲取ILog對象--> 8 <logger name="logger"> 9 <!--control log level: ALL|DEBUG|INFO|WARN|ERROR|FATAL|OFF--> 10 <!--如果沒有定義LEVEL的值,則缺省為DEBUG--> 11 <level value="ALL" /> 12 <appender-ref ref="LogSmtpAppender" /> 13 <appender-ref ref="LogFileAppender" /> 14 </logger> 15 16 <!--定義輸出到文件中--> 17 <appender name="LogFileAppender" type="log4net.Appender.FileAppender"> 18 <!--定義文件存放位置--> 19 <file value="Log/Log.txt" /> 20 <appendToFile value="true" /> 21 <rollingStyle value="Date" /> 22 <datePattern value="yyyyMMdd-HH:mm:ss" /> 23 <layout type="log4net.Layout.PatternLayout"> 24 <!--輸出格式--> 25 <conversionPattern value="記錄時間:%date 線程ID:[%thread] 日志級別:%-5level 出錯類:%logger property:[%property{NDC}] - 錯誤描述:%message%newline" /> 26 </layout> 27 </appender> 28 <!--定義郵件發送--> 29 <appender name="LogSmtpAppender" type="log4net.Appender.SmtpAppender"> 30 <authentication value="Basic" /> 31 <to value="接受郵件的郵箱" /> 32 <from value="發送郵件的郵箱" /> 33 <username value="發送郵件的郵箱" /> 34 <password value="發送郵件的密碼" /> 35 <subject value="XXX應用錯誤日志消息" /> 36 <smtpHost value="smtp.exmail.qq.com" /> 37 <bufferSize value="2048" /> 38 <!--超長部分是否丟棄--> 39 <lossy value="true" /> 40 <!-- 下面的定義, 就是 日志級別 大於 WARN 的, 才發郵件. --> 41 <evaluator type="log4net.Core.LevelEvaluator"> 42 <threshold value="ERROR"/> 43 </evaluator> 44 <!-- 下面是 定義郵件的格式 (好多換行啊) --> 45 <layout type="log4net.Layout.PatternLayout"> 46 <conversionPattern value="%property{log4net:HostName} :: %level :: %message %newlineLogger: %logger%newlineThread: %thread%newlineDate: %date%newlineNDC: %property{NDC}%newline%newline" /> 47 </layout> 48 </appender> 49 50 </log4net> 51 </configuration>
以上配置的是記事本記錄錯誤日志后郵件發送錯誤日志,郵件發送錯誤日志需要接受郵件和發送郵件,多個郵箱接受的話以“,”分割接受郵件(以上使用騰訊的企業游戲發送的,如果是其他郵箱,需要修改smtpHost的值)
配置好了開始使用,先在AssemblyInfo.cs這個里面加上這句
1 [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
新建個Log類,負責處理錯誤日志
1 public class Log 2 { 3 private static log4net.ILog log = log4net.LogManager.GetLogger("logger"); 4 5 public static void Debug(string message) 6 { 7 if (log.IsDebugEnabled) 8 { 9 log.Debug(message); 10 } 11 } 12 13 public static void Debug(System.Exception ex1) 14 { 15 if (log.IsDebugEnabled) 16 { 17 log.Debug(ex1.Message.ToString() + "/r/n" + ex1.Source.ToString() + "/r/n" + ex1.TargetSite.ToString() + "/r/n" + ex1.StackTrace.ToString()); 18 } 19 } 20 21 public static void Error(string message) 22 { 23 if (log.IsErrorEnabled) 24 { 25 log.Error(message); 26 } 27 } 28 29 public static void Fatal(string message) 30 { 31 32 if (log.IsFatalEnabled) 33 { 34 log.Fatal(message); 35 } 36 } 37 38 public static void Info(string message) 39 { 40 if (log.IsInfoEnabled) 41 { 42 log.Info(message); 43 } 44 } 45 46 public static void Warn(string message) 47 { 48 if (log.IsWarnEnabled) 49 { 50 log.Warn(message); 51 } 52 } 53 }
調用的時候,在各類方法的try{}catch{}的代碼塊里直接通過Log調用靜態方法就可以了
測試看看結果:
在網站的目錄里會有個Log文件夾,里面有個Log.txt文件
郵件接受的: