注入的log4net将重复的消息记录到控制台

时间:2017-05-21 22:57:23

标签: c# log4net

我正在按如下方式注入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配置。我在生成的日志文件中添加了一个文件追加器和这些行不重复

2 个答案:

答案 0 :(得分:0)

您的记录器可能没有配置可添加性:

<logger name="myloggername" additivity="false">

答案 1 :(得分:0)

事实证明,另一个开发人员在类的构造函数中调用了XmLConfigurator.Configure(),而这个类没有通过DI正确注入。因此,每次实例化类时,都会再次配置log4net,添加每个配置的记录器的另一个实例。