.NET日志记录框架Log4Net使用总结

8/10/2015来源:ASP.NET技巧人气:3334

.NET日志记录框架Log4Net使用总结

做项目,记录日志是免不了的。在开发过程中还可以调试,但是在项目发布之后,不可能长期这么做,日志则能够在最快的时间内发现问题。最近,在好几个项目中使用了Log4net,感觉确实给我省了不少力,总结一下使用吧,同时也留作以后备用。

1 使用Nuget安装Log4Net:Install-Package log4net

QQ截图20141031182038

QQ截图20141031182104

2 创建LogHelper.cs

  1. usingSystem;
  2. namespaceUCsoft.Web.Common
  3. {
  4. ///<summary>
  5. ///Log4Net日志封装类2014-08-2814:58:50By唐有炜
  6. ///</summary>
  7. publicclassLogHelper
  8. {
  9. ///<summary>
  10. ///信息标志
  11. ///</summary>
  12. PRivatestaticreadonlylog4net.ILogloginfo=log4net.LogManager.GetLogger("loginfo");
  13. ///<summary>
  14. ///错误标志
  15. ///</summary>
  16. privatestaticreadonlylog4net.ILoglogerror=log4net.LogManager.GetLogger("logerror");
  17. ///<summary>
  18. ///调试标志
  19. ///</summary>
  20. privatestaticreadonlylog4net.ILoglogdebug=log4net.LogManager.GetLogger("logdebug");
  21. ///<summary>
  22. ///Log4Net信息记录封装2014-08-2814:58:50By唐有炜
  23. ///</summary>
  24. ///<paramname="message"></param>
  25. ///<returns></returns>
  26. publicstaticvoidInfo(stringmessage)
  27. {
  28. if(loginfo.IsInfoEnabled)
  29. {
  30. loginfo.Info(message);
  31. }
  32. }
  33. ///<summary>
  34. ///Log4Net错误记录封装2014-08-2814:58:50By唐有炜
  35. ///</summary>
  36. ///<paramname="message"></param>
  37. ///<returns></returns>
  38. publicstaticvoidError(stringmessage)
  39. {
  40. if(logerror.IsErrorEnabled)
  41. {
  42. logerror.Error(message);
  43. }
  44. }
  45. ///<summary>
  46. ///Log4Net错误记录封装2014-08-2814:58:50By唐有炜
  47. ///</summary>
  48. ///<paramname="message"></param>
  49. ///<paramname="ex"></param>
  50. ///<returns></returns>
  51. publicstaticvoidError(stringmessage,Exceptionex)
  52. {
  53. if(logerror.IsErrorEnabled)
  54. {
  55. if(!string.IsNullOrEmpty(message)&&ex==null)
  56. {
  57. logerror.ErrorFormat("<br/>【附加信息】:{0}<br>",newobject[]{message});
  58. }
  59. elseif(!string.IsNullOrEmpty(message)&&ex!=null)
  60. {
  61. stringerrorMsg=BeautyErrorMsg(ex);
  62. logerror.ErrorFormat("<br/>【附加信息】:{0}<br>{1}",newobject[]{message,errorMsg});
  63. }
  64. elseif(string.IsNullOrEmpty(message)&&ex!=null)
  65. {
  66. stringerrorMsg=BeautyErrorMsg(ex);
  67. logerror.Error(errorMsg);
  68. }
  69. }
  70. }
  71. ///<summary>
  72. ///Log4Net调试记录封装2014-08-2814:58:50By唐有炜
  73. ///</summary>
  74. ///<paramname="message"></param>
  75. ///<returns></returns>
  76. publicstaticvoidDebug(stringmessage)
  77. {
  78. if(logdebug.IsErrorEnabled)
  79. {
  80. logdebug.Debug(message);
  81. }
  82. }
  83. ///<summary>
  84. ///Log4Net调试记录封装2014-08-2814:58:50By唐有炜
  85. ///</summary>
  86. ///<paramname="message"></param>
  87. ///<paramname="ex"></param>
  88. ///<returns></returns>
  89. publicstaticvoidDebug(stringmessage,Exceptionex)
  90. {
  91. if(logdebug.IsDebugEnabled)
  92. {
  93. if(!string.IsNullOrEmpty(message)&&ex==null)
  94. {
  95. logdebug.DebugFormat("<br/>【附加信息】:{0}<br>",newobject[]{message});
  96. }
  97. elseif(!string.IsNullOrEmpty(message)&&ex!=null)
  98. {
  99. stringerrorMsg=BeautyErrorMsg(ex);
  100. logdebug.DebugFormat("<br/>【附加信息】:{0}<br>{1}",newobject[]{message,errorMsg});
  101. }
  102. elseif(string.IsNullOrEmpty(message)&&ex!=null)
  103. {
  104. stringerrorMsg=BeautyErrorMsg(ex);
  105. logdebug.Debug(errorMsg);
  106. }
  107. }
  108. }
  109. ///<summary>
  110. ///美化错误信息
  111. ///</summary>
  112. ///<paramname="ex">异常</param>
  113. ///<returns>错误信息</returns>
  114. privatestaticstringBeautyErrorMsg(Exceptionex)
  115. {
  116. stringerrorMsg=string.Format("【异常类型】:{0}<br>【异常信息】:{1}<br>【堆栈调用】:{2}",
  117. newobject[]{ex.GetType().Name,ex.Message,ex.StackTrace});
  118. errorMsg=errorMsg.Replace("\r\n","<br>");
  119. errorMsg=errorMsg.Replace("位置","<strongstyle=\"color:red\">位置</strong><br/>");
  120. returnerrorMsg;
  121. }
  122. }
  123. }

3 在AssemblyInfo里面注册(非常重要)

QQ截图20141031182845QQ截图20141031182858

[assembly: log4net.Config.xmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]

4 创建log4net.config

  1. <log4net>
  2. <appendername="LogFileAppender"type="log4net.Appender.RollingFileAppender">
  3. <paramname="File"value="Log\\"/>
  4. <!--输出到什么目录-->
  5. <paramname="AppendToFile"value="true"/>
  6. <!--是否覆写到文件中-->
  7. <paramname="StaticLogFileName"value="false"/>
  8. <!--是否使用静态文件名-->
  9. <paramname="DatePattern"value="yyyyMMdd&quot;.html&quot;"/>
  10. <!--日志文件名-->
  11. <paramname="RollingStyle"value="Date"/>
  12. <!--最小锁定模型以允许多个进程可以写入同一个文件-->
  13. <paramname="lockingModel"type="log4net.Appender.FileAppender+MinimalLock"/>
  14. <layouttype="log4net.Layout.PatternLayout">
  15. <paramname="ConversionPattern"value="&lt;HRCOLOR=green&gt;%n日志时间:%d[%t]&lt;BR&gt;%n日志级别:%-5p&lt;BR&gt;%n日志标志:%c&lt;BR&gt;%n日志信息:%m&lt;BR&gt;%n&lt;HRSize=1&gt;"/>
  16. </layout>
  17. <filtertype="log4net.Filter.LevelRangeFilter">
  18. <levelMinvalue="DEBUG"/>
  19. <levelMaxvalue="INFO"/>
  20. </filter>
  21. </appender>
  22. <appendername="ErrorFileAppender"type="log4net.Appender.RollingFileAppender">
  23. <paramname="File"value="Log\\"/>
  24. <paramname="AppendToFile"value="true"/>
  25. <paramname="StaticLogFileName"value="false"/>
  26. <paramname="DatePattern"value="yyyyMMdd.error&quot;.html&quot;"/>
  27. <paramname="RollingStyle"value="Date"/>
  28. <!--最小锁定模型以允许多个进程可以写入同一个文件-->
  29. <paramname="lockingModel"type="log4net.Appender.FileAppender+