我正在按如下方式注入log4net:
DI
container.RegisterSingleton<Func<object, ILog>>(instance => {
return LogManager.GetLogger(instance.GetType());
});
用法
public class MyClass {
private readonly ILog _logger;
public MyClass(Func<object, ILog> loggerFactory) {
_logger = loggerFactory(this);
}
}
在控制台中,我获得了可预测的重复消息。第一组消息打印一次,第二组打印两次,第六组打印六次等等......
4470 [6] INFO JobManager - Getting pending jobs...
5953 [5] DEBUG JobManager - #113: 1 / 14 (7.14 %)
6489 [6] INFO JobManager - Getting pending jobs...
6489 [6] INFO JobManager - Getting pending jobs...
7679 [8] DEBUG JobManager - #113: 2 / 14 (14.29 %)
7679 [8] DEBUG JobManager - #113: 2 / 14 (14.29 %)
8512 [6] INFO JobManager - Getting pending jobs...
8512 [6] INFO JobManager - Getting pending jobs...
8512 [6] INFO JobManager - Getting pending jobs...
9551 [29] DEBUG JobManager - #113: 3 / 14 (21.43 %)
9551 [29] DEBUG JobManager - #113: 3 / 14 (21.43 %)
9551 [29] DEBUG JobManager - #113: 3 / 14 (21.43 %)
老实说,我不知道为什么它甚至会登录到控制台,因为我没有配置或启用该appender,它甚至在我注释{{1}时也会这样做和配置文件中与log4net相关的东西。我唯一使用的是直布罗陀。请注意,我是从VS运行它,而不是调试,并尝试了具有相同结果的Debug和Release配置。我在生成的日志文件中添加了一个文件追加器和这些行不重复。
答案 0 :(得分:0)
您的记录器可能没有配置可添加性:
<logger name="myloggername" additivity="false">
答案 1 :(得分:0)
事实证明,另一个开发人员在类的构造函数中调用了XmLConfigurator.Configure()
,而这个类没有通过DI正确注入。因此,每次实例化类时,都会再次配置log4net,添加每个配置的记录器的另一个实例。