论坛首页 综合技术论坛

[QuickStart] 使用Log4net记录日志

浏览 5816 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2006-12-06  

概述

最近因为工作关系,开始转投C#阵营,基于公司的一个产品作二次开发。公司产品的现状让我有点诧异,居然没有记录日志,如果程序报错,就会弹出一个可恶的对话框。除了调试源码没有任何办法知道是什么原因引起的。

C#的同事建议写一个简单的日志API,可能因为JAVA的开源精神的影响,还是决定采用开源组件,为什么要重复造轮子呢?

哈哈,于是决定引入log4net组件,本篇文章只是记录一下使用log4net的QuickStart,并提出遇到的一些问题。

下载

logging.apache.org/log4net/下载log4net组件。

添加引用

在工程中添加log4net.dll动态库的引用。

配置log4net

要配置log4net有多种方式,这里采用个人认为比较简单的方法,首先需要在AssemblyInfo.cs中添加如下代码块:
java 代码
  1. [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = false)]  
上述代码表示log4net的配置文件名称为log4net.config,watch表示是否需要实时监听log4net.config配置文件的改变。接着需要添加log4net.config文件,配置相关参数,具体的参数含义和log4j很类似,这里就不详述了,下面是一个示例的配置文件:
java 代码
  1. <?xml version="1.0" encoding="utf-8" ?>   
  2. <log4net>   
  3.   <appender name="FileAppender" type="log4net.Appender.FileAppender">   
  4.     <file value="logs/log.txt" />   
  5.     <appendToFile value="true" />   
  6.     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />   
  7.     <layout type="log4net.Layout.PatternLayout">   
  8.       <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />   
  9.     </layout>   
  10.   </appender>   
  11.   <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">   
  12.     <mapping>   
  13.       <level value="ERROR" />   
  14.       <foreColor value="White" />   
  15.       <backColor value="Red, HighIntensity" />   
  16.     </mapping>   
  17.     <mapping>   
  18.       <level value="DEBUG" />   
  19.       <backColor value="Green" />   
  20.     </mapping>   
  21.     <layout type="log4net.Layout.PatternLayout">   
  22.       <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />   
  23.     </layout>   
  24.   </appender>   
  25.   <appender name="TraceAppender" type="log4net.Appender.TraceAppender">   
  26.     <layout type="log4net.Layout.PatternLayout">   
  27.       <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />   
  28.     </layout>   
  29.   </appender>   
  30.   
  31.   <root>   
  32.     <level value="INFO" />   
  33.     <appender-ref ref="ColoredConsoleAppender" />   
  34.     <appender-ref ref="FileAppender" />   
  35.   </root>   
  36. </log4net>  

记录日志

现在就可以在程序中使用log4net组件记录日志了,步骤如下:

  • 使用using log4net;语句引用log4net组件。
  • 构建ILog实例,类似如下:
java 代码
  1. private static readonly ILog LOG = LogManager.GetLogger(typeof(DbDynamicShipProvider));  
  • 在需要记录日志的地方,调用ILog的相应方法,比如LOG.info。

一点想法

最困难的事情不是如何做,而是做什么。对于使用开源组件也是一样的道理,最困难的不是怎么样记录日志,而是在什么情况下记录什么。

有很多项目都五脏俱全,但是很多设施并没有起到真正的作用。比如日志,当出了问题的时候从日志中很快地判断问题所在区域,还是必须调试程序才能找到原因。

在哪些地方需要记录日志,使用什么级别,这才是最关键的问题。

待解决问题

如果一个解决方案中包含一个或者多个Assembly,希望每个Assembly都可以使用log4net 记录日志,并记录到同一个文件?

如果按照JAVA的作法,在每个Assembly都使用如上同样的配置,最后所有的日志都会失效。去网上查的原因是log4net会锁住日志文件,可以通过repository来实现,但是具体如何实现呢?我还没有找到解决方案,目前只能一个解决方案包含一个单一的项目。

   发表时间:2006-12-08  
你的待解决问题方法:
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
0 请登录后投票
   发表时间:2006-12-10  
你的待解决问题方法: 
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 


我试过这种方式,好像不行噢。

你的作法是这样的吗?

在每个Assembly中添加类似如上同样的配置?

0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics