概述
最近因为工作关系,开始转投C#阵营,基于公司的一个产品作二次开发。公司产品的现状让我有点诧异,居然没有记录日志,如果程序报错,就会弹出一个可恶的对话框。除了调试源码没有任何办法知道是什么原因引起的。
C#的同事建议写一个简单的日志API,可能因为JAVA的开源精神的影响,还是决定采用开源组件,为什么要重复造轮子呢?
哈哈,于是决定引入log4net组件,本篇文章只是记录一下使用log4net的QuickStart,并提出遇到的一些问题。
下载
添加引用
在工程中添加log4net.dll动态库的引用。
配置log4net
要配置log4net有多种方式,这里采用个人认为比较简单的方法,首先需要在AssemblyInfo.cs中添加如下代码块:
java 代码
- [assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = false)]
上述代码表示log4net的配置文件名称为log4net.config,watch表示是否需要实时监听log4net.config配置文件的改变。接着需要添加log4net.config文件,配置相关参数,具体的参数含义和log4j很类似,这里就不详述了,下面是一个示例的配置文件:
java 代码
- <?xml version="1.0" encoding="utf-8" ?>
- <log4net>
- <appender name="FileAppender" type="log4net.Appender.FileAppender">
- <file value="logs/log.txt" />
- <appendToFile value="true" />
- <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
- </layout>
- </appender>
- <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
- <mapping>
- <level value="ERROR" />
- <foreColor value="White" />
- <backColor value="Red, HighIntensity" />
- </mapping>
- <mapping>
- <level value="DEBUG" />
- <backColor value="Green" />
- </mapping>
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
- </layout>
- </appender>
- <appender name="TraceAppender" type="log4net.Appender.TraceAppender">
- <layout type="log4net.Layout.PatternLayout">
- <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
- </layout>
- </appender>
-
- <root>
- <level value="INFO" />
- <appender-ref ref="ColoredConsoleAppender" />
- <appender-ref ref="FileAppender" />
- </root>
- </log4net>
记录日志
现在就可以在程序中使用log4net组件记录日志了,步骤如下:
- 使用using log4net;语句引用log4net组件。
- 构建ILog实例,类似如下:
java 代码
- private static readonly ILog LOG = LogManager.GetLogger(typeof(DbDynamicShipProvider));
- 在需要记录日志的地方,调用ILog的相应方法,比如LOG.info。
一点想法
最困难的事情不是如何做,而是做什么。对于使用开源组件也是一样的道理,最困难的不是怎么样记录日志,而是在什么情况下记录什么。
有很多项目都五脏俱全,但是很多设施并没有起到真正的作用。比如日志,当出了问题的时候从日志中很快地判断问题所在区域,还是必须调试程序才能找到原因。
在哪些地方需要记录日志,使用什么级别,这才是最关键的问题。
待解决问题
如果一个解决方案中包含一个或者多个Assembly,希望每个Assembly都可以使用log4net 记录日志,并记录到同一个文件?
如果按照JAVA的作法,在每个Assembly都使用如上同样的配置,最后所有的日志都会失效。去网上查的原因是log4net会锁住日志文件,可以通过repository来实现,但是具体如何实现呢?我还没有找到解决方案,目前只能一个解决方案包含一个单一的项目。
分享到:
- 2006-12-06 19:32
- 浏览 3855
- 评论(2)
- 论坛回复 / 浏览 (2 / 5817)
- 查看更多
相关推荐
4. **使用日志**:在代码中使用`LogManager.GetLogger()`获取Logger实例,然后通过`Logger`的方法如`Debug()`, `Info()`, `Warn()`, `Error()`和`Fatal()`记录日志。 **QuickStart示例** 在"QuickStart"这个压缩包...
1. master 将改变记录到二进制日志(Binary Log)中; 2. slave 将 master 的 Binary Log events 拷贝到它的中继日志(Relay Log); 3. slave 重做中继日志中的事件,将改变反映它自己的数据。 Canal 模拟 MySQL ...
- 变更日志文件(例如 `changelog.xml`)是 Liquibase 的核心,它记录了所有数据库更改。以下是一个简单的例子: ```xml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=...
- **Log4j**:日志记录库,可选,如果需要查看更详细的日志信息,可以添加到上下文类路径。 4. **配置注意事项** - 不要在全局类路径中放置除JDBC驱动之外的其他库,以避免与其他工具冲突,如log4j和commons-...
3. 日志记录:禁止使用`System.out.println`,改用框架内置的日志机制(如log.debug, log.warn等)。 4. 版本提交规范:遵循特定注释格式,如`/*$Id:...$*/`。 5. 方法注释:每个方法都需要写注释,提高代码可读性。...
此外,通过深入研究模板,你还可以了解到Akka的其他高级特性,如持久化Actors、监控和日志记录、网络通信以及集群支持等。对于希望掌握Scala和Akka的人来说,这是一个理想的起点。通过实践这个模板项目,你可以快速...
- **Log4j**:可选的日志记录框架,如果使用,需要在上下文类路径中包含其库文件和配置文件。 4. **其他注意事项** - **lib/README.txt**:查阅Hibernate发行包中的此文件,以获取最新的第三方库列表和要求。 ...
11. **日志**:Spring Boot 默认集成 Logback 或 Log4j2 进行日志记录。 12. **测试**:使用 `@SpringBootTest` 和 `@WebMvcTest` 等注解进行单元测试和集成测试。 通过这个快速入门项目,你可以逐步了解并掌握 ...
Changelog部分列出Flask库的重要变更记录。 许可证(License)部分说明了Flask的开源许可条款,这通常指明了你可以自由使用和修改Flask的权限范围。 整体而言,这份文档是一份全面的指南,旨在帮助开发者掌握Flask...
12. API变更日志(API Change Log) 提供了API各个版本的变更记录,开发者可以查阅以了解API的更新内容和新增功能。 以上内容仅涉及Blender Python API的一部分知识点。实际使用中,开发者可以根据需要查阅Blender...
4. 添加日志记录,以便查看请求和响应详情: ```java request.log().all(); ``` 5. 添加断言来验证响应: ```java response.then().statusCode(200); response.then().body("expectedField", equalTo(...
8. **CHANGELOG**:变更日志,记录了项目的版本更新和改进,帮助用户了解每次更新带来的变化。 通过这个开源项目,用户不仅可以学习到如何使用Ruby编程语言来实现复杂模拟系统,还能深入了解职业体育联盟的选秀机制...