使用Log4Net發送日志郵件


前言

 公司前幾天重新確立了考核指標,主要是針對我們研發部,而我們的經理要求也高,對我們績效考核扣分也挺狠的,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文件

 

   郵件接受的:

 

  


免責聲明!

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



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