log4Net 运行的大致逻辑
- 应用程序启动,加载程序集 log4net.dll
- 指定 log4net.dll 的配置文件
- 根据配置文件中输出对象的命名初始化实例
- 调用 log4Net 的实例方法输出日志
不产生日志文件可能的原因
- 这里是列表文本程序集未加载 这个基本可能排除。(* ̄︶ ̄)地球猿应该都会保证Debug下面有引用过的程序集吧
2.配置文件常用的两种方法。
一种是直接在App.config 中指定,另外一种是 创建一个单独的xml文件作为配置。这里有几项需要检查的细节,一般不输出的话都是这里的问题。
3.在log4.net 的配置节中可以同时命名多个Appender,并指定它的输出方式。 在程序中需要根据自己的需求指定。
4.方法调用不用说,如果没有这一步肯定不会输出日志。
排除问题需要着重检查的几项
1.启动代码中正确指定了配置文件
// 日志配置文件位置
string logFilePath = AppDomain.CurrentDomain.BaseDirectory + "log4net.Config";
//注册 log4net的配置文件
log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo(logFilePath));
2.配置文件和程序集都在Debug目录下
确认一下配置文件在VS中设置为“如果有较新则复制”或“始终复制”,对用 在app.config 中设置或者单独的配置文件都需要检查,因为很多时候“复制大法”导致手工加入或粘贴到项目而忘记重新配置
本小白就是载到这里了,因为经常使用相同的配置,直接从其他项目中把文件粘了过来,没有重新设置文件属性o(╥﹏╥)o
- 在App.config 中配置log4net 时需要保证配置节在正确的位置。
**注意:**由于config配置文件的特性,如果在config配置文件中存在configsections节点,则必须将configsections作为第一上配置项,否则会引发异常:配置系统未能初始化。
配置备忘
- 如何防止自定义的logger和root重复写入日志
其实log4net提供了一种很好的解决方式,断开logger与root的继承关系,只要在配置文件里的logger加上属性additivity="false" 就可以了。