`
white182517
  • 浏览: 162812 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[QuickStart] 使用Log4net记录日志

    博客分类:
  • c#
阅读更多

概述

最近因为工作关系,开始转投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来实现,但是具体如何实现呢?我还没有找到解决方案,目前只能一个解决方案包含一个单一的项目。

分享到:
评论
2 楼 white182517 2006-12-10  
你的待解决问题方法: 
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 


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

你的作法是这样的吗?

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

1 楼 ray_linn 2006-12-08  
你的待解决问题方法:
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

相关推荐

    NHibernate和log4Net的简单应用例子

    4. **使用日志**:在代码中使用`LogManager.GetLogger()`获取Logger实例,然后通过`Logger`的方法如`Debug()`, `Info()`, `Warn()`, `Error()`和`Fatal()`记录日志。 **QuickStart示例** 在"QuickStart"这个压缩包...

    Canal集群化部署.docx

    1. master 将改变记录到二进制日志(Binary Log)中; 2. slave 将 master 的 Binary Log events 拷贝到它的中继日志(Relay Log); 3. slave 重做中继日志中的事件,将改变反映它自己的数据。 Canal 模拟 MySQL ...

    quickstart-liquibase:在 Java 项目中使用 liquibase 的快速入门

    - 变更日志文件(例如 `changelog.xml`)是 Liquibase 的核心,它记录了所有数据库更改。以下是一个简单的例子: ```xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=...

    hibernate学习.doc

    - **Log4j**:日志记录库,可选,如果需要查看更详细的日志信息,可以添加到上下文类路径。 4. **配置注意事项** - 不要在全局类路径中放置除JDBC驱动之外的其他库,以避免与其他工具冲突,如log4j和commons-...

    tarpstry框架学习基础

    3. 日志记录:禁止使用`System.out.println`,改用框架内置的日志机制(如log.debug, log.warn等)。 4. 版本提交规范:遵循特定注释格式,如`/*$Id:...$*/`。 5. 方法注释:每个方法都需要写注释,提高代码可读性。...

    akka-quickstart-scala.g8:使用Scala构建的Akka的最小种子模板

    此外,通过深入研究模板,你还可以了解到Akka的其他高级特性,如持久化Actors、监控和日志记录、网络通信以及集群支持等。对于希望掌握Scala和Akka的人来说,这是一个理想的起点。通过实践这个模板项目,你可以快速...

    Hibernate基础.doc

    - **Log4j**:可选的日志记录框架,如果使用,需要在上下文类路径中包含其库文件和配置文件。 4. **其他注意事项** - **lib/README.txt**:查阅Hibernate发行包中的此文件,以获取最新的第三方库列表和要求。 ...

    spring-quickstart:Spring Boot 快速入门项目

    11. **日志**:Spring Boot 默认集成 Logback 或 Log4j2 进行日志记录。 12. **测试**:使用 `@SpringBootTest` 和 `@WebMvcTest` 等注解进行单元测试和集成测试。 通过这个快速入门项目,你可以逐步了解并掌握 ...

    flask库说明.pdf

    Changelog部分列出Flask库的重要变更记录。 许可证(License)部分说明了Flask的开源许可条款,这通常指明了你可以自由使用和修改Flask的权限范围。 整体而言,这份文档是一份全面的指南,旨在帮助开发者掌握Flask...

    blender api

    12. API变更日志(API Change Log) 提供了API各个版本的变更记录,开发者可以查阅以了解API的更新内容和新增功能。 以上内容仅涉及Blender Python API的一部分知识点。实际使用中,开发者可以根据需要查阅Blender...

    创建Maven工程实现RestAsured框架

    4. 添加日志记录,以便查看请求和响应详情: ```java request.log().all(); ``` 5. 添加断言来验证响应: ```java response.then().statusCode(200); response.then().body("expectedField", equalTo(...

    Open Src Draft Simulator-开源

    8. **CHANGELOG**:变更日志,记录了项目的版本更新和改进,帮助用户了解每次更新带来的变化。 通过这个开源项目,用户不仅可以学习到如何使用Ruby编程语言来实现复杂模拟系统,还能深入了解职业体育联盟的选秀机制...

Global site tag (gtag.js) - Google Analytics