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

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

1 使用Nuget安装Log4Net:

Install-Package log4net

2 创建LogHelper.cs

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

3 在

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

3 创建log4net.config

  1. <log4net>
  2. <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
  3. <param name="File" value="Log\\" />
  4. <!-- 输出到什么目录-->
  5. <param name="AppendToFile" value="true" />
  6. <!-- 是否覆写到文件中-->
  7. <param name="StaticLogFileName" value="false" />
  8. <!-- 是否使用静态文件名-->
  9. <param name="DatePattern" value="yyyyMMdd&quot;.html&quot;" />
  10. <!-- 日志文件名-->
  11. <param name="RollingStyle" value="Date" />
  12. <!--最小锁定模型以允许多个进程可以写入同一个文件-->
  13. <param name="lockingModel"  type="log4net.Appender.FileAppender+MinimalLock" />
  14. <layout type="log4net.Layout.PatternLayout">
  15. <param name="ConversionPattern" value="&lt;HR COLOR=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;HR Size=1&gt;"  />
  16. </layout>
  17. <filter type="log4net.Filter.LevelRangeFilter">
  18. <levelMin value="DEBUG" />
  19. <levelMax value="INFO" />
  20. </filter>
  21. </appender>
  22. <appender name="ErrorFileAppender" type="log4net.Appender.RollingFileAppender">
  23. <param name="File" value="Log\\" />
  24. <param name="AppendToFile" value="true" />
  25. <param name="StaticLogFileName" value="false" />
  26. <param name="DatePattern" value="yyyyMMdd.error&quot;.html&quot;" />
  27. <param name="RollingStyle" value="Date" />
  28. <!--最小锁定模型以允许多个进程可以写入同一个文件-->
  29. <param name="lockingModel"  type="log4net.Appender.FileAppender+MinimalLock" />
  30. <layout type="log4net.Layout.PatternLayout">
  31. <param name="ConversionPattern" value="&lt;HR COLOR=red&gt;%n异常时间:%d [%t] &lt;BR&gt;%n异常级别:%-5p &lt;BR&gt;%n日志标志:%c &lt;BR&gt; %n异常信息:%m &lt;BR&gt;%n &lt;HR Size=1&gt;"  />
  32. </layout>
  33. <filter type="log4net.Filter.LevelRangeFilter">
  34. <levelMin value="ERROR" />
  35. <levelMax value="FATAL" />
  36. </filter>
  37. </appender>
  38. <root>
  39. <level value="ALL" />
  40. <appender-ref ref="LogFileAppender" />
  41. <appender-ref ref="ErrorFileAppender"/>
  42. </root>
  43. </log4net>

 然后必须设置为复制到输出目录

4 测试

 LogHelper.Debug("测试");

然后在Web根目录会生成一个Log文件夹,里面会有两个文件,一个一日期命名,一个错误文件

时间: 10-30

.NET日志记录框架Log4Net使用总结的相关文章

Log4Net日志记录介绍

原文地址 : http://www.cnblogs.com/wolf-sun/p/3347373.html#3009010 简介 log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具.     log4net是Apache软件基金会Apache Logging Services工程的一部分.Apache日志服务工程致力于为程序调试和审计提供跨语言的日志服务.(f:百度百科) 原理 Log4

使用log4net无法将日志记录插入mysql数据库解决办法

写在前面 今天没事研究了下,将日志文件写入mysql数据库,因为新公司用的数据库也是mysql,项目中需要将日志信息写入数据库,没办法,就研究了下.在使用过程中遇到一个很蛋疼的问题.最后解决了,郁闷了半天.这里做一下记录,以免再犯. 之前写个这方面的文章,关于配置信息,可参考我的这篇文章:Log4Net日志记录两种方式 解决办法 问题就出在我直接将log4net写入数据库的配置文件log4net.config直接复制过来在项目中使用了,当然是修改了连接字符串,提供程序等与mysql相关的配置.配

转:使用log4net完成程序异常日志记录(使用SQLite数据库记录和普通文本记录)

http://www.cnblogs.com/kyo-yo/archive/2010/06/11/use-log4net-to-log-exception.html 在前端时间开发的时候由于需要将异常保存到数据库中,所以就到网上搜了下专门的日志记录工具,一搜果然很多,比如:log4net,NLog,EntLib Logging等等,但是还是log4net名气最大,所以就下载下来试用了一番,果然很方便,其涵盖了所有常用的日志记录方式具体的可以看下表: AdoNetAppender 将日志记录到数据

日志收集框架 Exceptionless

日志收集框架 Exceptionless 前言 从去年就答应过Eric(Exceptionless的作者之一),在中国会帮助给 Exceptionless 做推广,但是由于各种原因一直没有做这件事情,在此对Eric表示歉意.:) Exceptionless 简介 Exceptionless 是一个开源的实时的日志收集框架,它可以应用在基于 ASP.NET,ASP.NET Core,Web Api,Web Forms,WPF,Console,MVC 等技术栈的应用程序中,并且提供了Rest接口可以

巧用CurrentThread.Name来统一标识日志记录

先看下面的日志: 2017/5/21 18:00:01 [OrderQuery_180001914_C72FF]请求支付中心参数:{"order_no":"KB201705210000165","sign":"e6c3559cd4b36458b180f15bfcd9b5a5"} 2017/5/21 18:00:01 [OrderQuery_180001914_C72FF]支付中心验签通过. 2017/5/21 18:00:01

PHP 错误与异常的日志记录

提到 Nginx + PHP 服务的错误日志,我们通常能想到的有 Nginx 的 access 日志.error 日志以及 PHP 的 error 日志.虽然看起来是个很简单的问题,但里面其实又牵扯到应用配置以及日志记录位置的问题,如果是在 ubuntu 等系统下使用 apt-get 的方式来安装,其自有一套较为合理的的配置文件可用.再者运行的应用程序中的配置也会影响到日志记录的方式及内容. 错误与异常的区别 关于错误与异常,我们可以用一个简单的例子来理解: <?php try { 1 / 0;

Java日志系统框架的设计与实现

推荐一篇好的文章介绍java日志系统框架的设计的文章:http://soft.chinabyte.com/database/438/11321938.shtml 文章内容总结: 日志系统对跟踪调试.程序状态记录.数据恢复等功能有重要作用 日志系统一般作为服务进程或者系统调用存在,我们一般程序中使用系统调用 常用日志系统包括log4j的简单介绍 日志系统的系统架构 日志系统的信息分级 日志输出的设计 下面是全文的引用: 在Java领域,存在大量的日志组件,open-open收录了21个日志组件.日

wcf利用IDispatchMessageInspector实现接口监控日志记录和并发限流

一般对于提供出来的接口,虽然知道在哪些业务场景下才会被调用,但是不知道什么时候被调用.调用的频率.接口性能,当出现问题的时候也不容易重现请求:为了追踪这些内容就需要把每次接口的调用信息给完整的记录下来,也就是记录日志.日志中可以把调用方ip.服务器ip.调用时间点.时长.输入输出都给完整的记录下来,有了这些数据,排查问题.重现异常.性能瓶颈都能准确的找到切入点. 这种功能,当然没人想要去在每个Operation里边插入一段代码,如果有类似AOP的玩意就再好不过了. wcf中有IDispatchM

[C#]简易日志记录,线程安全

在实际项目开发中,会涉及日志记录问题,比较常用的有Log4Net,NLog等几个,而小项目小工具的话,则无需费此大驾.而譬如串口开发的话,需要记录串口过来的数据等等,则需要考虑日志记录上线程的问题,为了方便后续使用,封装了下代码,如下: using System; using System.Diagnostics; using System.IO; using System.Text; using System.Threading; namespace CSharpUtilHelpV2 { //

利用大数据技术实现日志记录与分析

整体思路 整体分三步: 1.记录日志 1.记录日志采用UDP协议写入大数据平台,大数据平台采用Hive表来存储日志信息. 2.写入日志的工作,封装了一个Auto.Lib3.Dealer.Log.dll,这个dll要依赖ZooKeeperNet.dll 和 log4net.dll.这三个dll文件地址如下: dll文件 TFS上路径 Auto.Lib3.Dealer.Log.dll $/dealer/MCH/CommonLib/Auto.Lib3.Logging.dll ZooKeeperNet.