我注射的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,并且即使在配置文件中注释掉XmlConfigurator.Configure()
和log4net相关的东西时也会这样做。我唯一使用的appender是直布罗陀。请注意,我正在从VS运行此操作,而不是进行调试,并尝试了Debug和Release配置,结果相同。我添加了一个文件appender,并且行在结果日志文件中没有被复制。
你能设置一个断点来'返回LogManager.GetLogger()'只是为了证明你不会为每个请求产生单例?只是一个想法... – Waescher
你为什么要注射Func而不是简单的ILog?我好奇。 – CodingYoshi
@CodingYoshi所以每种类型都可以有自己的记录器。除非我误解你的问题......? –