【发布时间】:2016-05-26 05:08:48
【问题描述】:
为了尝试使用 Log4net 获得良好的日志记录抽象,我从 this SO post 获取抽象,并从 this SO post 获取适配器,并尝试让它们一起工作。
真正剩下要做的就是配置容器,这是我没有成功的部分。
我试过的配置是
public static class InfrastructureRegistry
{
public static void RegisterLoggingServices(this Container container)
{
container.RegisterConditional(typeof(ILog), c => LogManager.GetLogger(
c.Consumer.ImplementationType).GetType(),
Lifestyle.Scoped, c => true);
container.RegisterPerWebRequest<ILogger, Log4netAdapter>();
}
}
从代码中可以看出,我想要一个特定的 log4net 记录器,它从注入的类中获取其类型。虽然大多数日志记录将在一个包罗万象的情况下完成,但我希望一些日志记录发生在较低层,例如当表单验证失败时。
我使用该配置获得的ActivationException 是:
LogImpl 类型的构造函数包含带名称的参数 'logger' 并键入未注册的 ILogger。请确保 ILogger已注册,或更改LogImpl的构造函数。
不太确定从这里去哪里,所以任何帮助将不胜感激。
编辑
抱歉,我应该指出我正在尝试编写它,这样我只需要编写一次此配置。以下工厂函数有效,但我不想每次要注入记录器时都手动添加更多配置:
container.RegisterPerWebRequest<ILog>(() => LogManager.GetLogger(typeof(LoginController)));
【问题讨论】:
标签: c# log4net simple-injector