我使用Windsor容器关注tutorial to setup log4net。像本教程中,我设置了LoggerInstaller类:log4net,Castle Windsor和Global.asax中的Application_Error方法
public class LoggerInstaller : IWindsorInstaller
{
public void Install(IWindsorContainer container, IConfigurationStore store)
{
container.AddFacility<LoggingFacility>(
f => f.LogUsing(LoggerImplementation.Log4net)
.WithConfig("log4net.config"));
}
}
在Global.asax,我有以下几种方法:
private static void BootStrapContainer()
{
container = new WindsorContainer()
.Install(FromAssembly.This());
var controllerFactory = new WindsorControllerFactory(container.Kernel);
ControllerBuilder.Current.SetControllerFactory(controllerFactory);
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
BootStrapContainer();
}
而且ILogger类型被注入:
public ILogger Logger { get; set; }
这工作正常具有ILogger属性的控制器,但我似乎无法让它注入Global.asax。我想要做的,就是记录未处理在Application_Error事件例外,像这样:
void Application_Error(Object sender, EventArgs e)
{
Exception ex = Server.GetLastError().GetBaseException();
Logger.Error("App_Error", ex);
}
的Application_Start中被调用时的LoggerInstaller(),但没有注射。任何帮助,将不胜感激。我敢肯定这可能是我忽略的一些简单的事情。
这似乎是一个很好的方法,但是当赋值时:'var logger = _container.Resolve();'记录器实例似乎没有正确配置,并且没有按照我的log4net.config设置进行登录。我在Application_Start()期间创建容器...任何想法? –
dolphy
2012-01-03 19:21:07
你能够成功运行我的代码片段吗? ILogger是否成功解决?你是否在应用程序根目录下有log4net.config?您是否验证了log4net.config设置? – Crixo 2012-01-04 08:12:34
您的代码编译并运行正常,但ILogger(来自castle命名空间,而不是log4net本机类型)似乎没有配置正确。 log4net.config位于根目录,在控制器方法中使用时可以正常工作。没有很多时间来解决问题。 – dolphy 2012-01-05 00:31:22