log4net的封裝

來源:互聯網
上載者:User

標籤:layout   布局   發送   sum   name   ica   [1]   span   zip   

毋庸置疑,log4net在記日誌的功能上無比強大。

但也有詬病的地方,比如配置太麻煩(這裡只說記錄檔案日誌,像記入資料庫的日誌本文不涉及,下同)

之前也看到過園子裡有人發的封裝成LogHelper的文章,少沒少配置我沒仔細看,但看下面評論有說日誌記錄還是有問題的

#8樓 2014-11-17 15:04 aeiiilowx  請教下樓主,使用封裝後的loghelper類寫日誌,在設定檔的布局裡,用%c、%f或%l 擷取的日誌類、檔案和行號永遠是loghelper類相應的行號了,也就是說不能正確擷取到真正日誌類、檔案和行號了。有遇到這個問題嗎?

這個問題我也遇到了,感覺不爽,當時放棄了。

昨天突然想把這個問題給解決掉,說幹就幹吧

 1     /// <summary> 2     /// 記錄日誌Factory 3     /// </summary> 4     public class LogFactory 5     { 6         /// <summary> 7         /// 靜態建構函式 8         /// </summary> 9         static LogFactory()10         {11             var element = CreateConfigElement();//建立XmlElement12             log4net.Config.XmlConfigurator.Configure(element);//配置log4net13         }14 15         /// <summary>16         /// 建立一個ILog,用於記錄日誌17         /// </summary>18         /// <returns></returns>19         public static log4net.ILog CreateLogger()20         {21             StackTrace st = new StackTrace();22             var arr = st.GetFrame(1);23             return log4net.LogManager.GetLogger(arr.GetMethod().DeclaringType);24         }25         /// <summary>26         /// 建立配置log4net需要用到的XmlElement27         /// </summary>28         /// <returns></returns>29         public static XmlElement CreateConfigElement()30         {31             var logDir = ConfigurationManager.AppSettings["LogDirectory"] ?? "";//擷取設定檔中的日誌目錄32             if(string.IsNullOrWhiteSpace(logDir))33                 throw new DirectoryNotFoundException("please check the key ‘LogDirectory‘ in appsettings");34             StringBuilder sb=new StringBuilder();35             sb.Append(@"<?xml version=""1.0""?>");36             //sb.Append(@"<configuration>");37             //sb.Append(@"<configSections>");38             //sb.Append(@"<section name=""log4net"" type=""log4net.Config.Log4NetConfigurationSectionHandler, log4net"" />");39             //sb.Append(@"</configSections>");40             sb.Append(@"<log4net>");41             sb.Append(@"<appender name=""myAppender"" type=""log4net.Appender.RollingFileAppender,log4net"">");42             sb.Append(@"<param name=""File"" value="""+logDir+@"""/>");43             sb.Append(@"<param name=""AppendToFile"" value=""true""/>");44             sb.Append(@"<param name=""RollingStyle"" value=""Composite""/>");45             sb.Append(@"<param name=""DatePattern"" value=""yyyy-MM-dd/HH&quot;.log&quot;""/>");46             sb.Append(@"<param name=""maximumFileSize"" value=""2MB""/>");47             sb.Append(@"<param name=""maxSizeRollBackups"" value=""100""/>");48             sb.Append(@"<param name=""StaticLogFileName"" value=""false""/>");49             sb.Append(@"<layout type=""log4net.Layout.PatternLayout,log4net"">");50             sb.Append(@"<param name=""ConversionPattern"" value=""%d [%t] %-5p %c [%x] &lt;%X{auth}&gt; - %n%m%n""/>");51             sb.Append(@"<param name=""Header"" value=""&#xD;&#xA;----------------------header--------------------------&#xD;&#xA;""/>");52             sb.Append(@"<param name=""Footer"" value=""&#xD;&#xA;----------------------footer--------------------------&#xD;&#xA;""/>");53             sb.Append(@"</layout>");54             sb.Append(@"<filter type=""log4net.Filter.LevelRangeFilter"">");55             sb.Append(@"<levelMin value=""INFO"" />");56             sb.Append(@"<levelMax value=""ERROR"" />");57             sb.Append(@"</filter>");58             sb.Append(@"</appender>");59             sb.Append(@"<!-- 所有日誌 -->");60             sb.Append(@"<root>");61             sb.Append(@"<!-- 記錄日誌的記錄層級: ALL, DEBUG, INFO, WARN, ERROR, FATAL, OFF -->");62             sb.Append(@"<priority value=""ALL""/>");63             sb.Append(@"<appender-ref ref=""myAppender""/>");64             sb.Append(@"</root>");65             sb.Append(@"</log4net>");66             //sb.Append(@"</configuration>");67 68             XmlDocument doc=new XmlDocument();69             doc.LoadXml(sb.ToString());70             return doc.DocumentElement;71         }72     }
LogFactory
1         private static readonly log4net.ILog Logger = LogFactory.CreateLogger();2         static void Main(string[] args)3         {4             Logger.Info("test message");5         }
使用方法

需要在設定檔內內添加

1   <appSettings>2     <add key="LogDirectory" value="D:\log\Test\"/>3   </appSettings>

 

 

----------------------header--------------------------
2016-11-10 11:42:21,567 [1] INFO _17MCP.Logger.Test.Program [(null)] <(null)> -
test message

----------------------footer--------------------------

上面就是記錄的內容。

很簡單的東西

封裝後的log4net傳送門在此

log4net.zip

 

log4net的封裝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.