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

C# 注入的log4net将重复消息记录到控制台,c#,log4net,C#,Log4net,我正在注入log4net,如下所示: DI container.RegisterSingleton<Func<object, ILog>>(instance => { return LogManager.GetLogger(instance.GetType()); }); 老实说,我不知道为什么它会登录到控制台,因为我没有配置或启用该appender,即使我在配置文件中注释掉XmlConfigurator.Configure()和log4net相关内容,它

我正在注入log4net,如下所示:

DI

container.RegisterSingleton<Func<object, ILog>>(instance => {
    return LogManager.GetLogger(instance.GetType());
});

老实说,我不知道为什么它会登录到控制台,因为我没有配置或启用该appender,即使我在配置文件中注释掉
XmlConfigurator.Configure()
和log4net相关内容,它也会这样做。我用的唯一一个appender是直布罗陀。请注意,我是从VS运行的,而不是调试,并尝试了调试和发布配置,结果相同。我添加了一个文件追加器,结果日志文件中的行不重复。

您的记录器上可能有未配置的可加性:

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


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

能否将断点设置为
return LogManager.GetLogger()
,以证明您不会为每个请求生成单例?只是一个想法…为什么你要注射Func而不是简单的ILog?我很好奇。@CodingYoshi,这样每种类型都可以有自己的记录器。除非我误解了你的问题…?事实上我明白了,我会把我的答案贴出来。
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 %)
<logger name="myloggername" additivity="false">