我使用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