私はtutorial to setup log4netにWindsorコンテナを使用しました。チュートリアルと同様に、IセットアップLoggerInstallerクラス:Global.asaxの中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"));
}
}
、私は次の方法があります:
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に注入するようには見えません。 LoggerInstallerはのApplication_Start中に呼び出されている()が、注入されていない
void Application_Error(Object sender, EventArgs e)
{
Exception ex = Server.GetLastError().GetBaseException();
Logger.Error("App_Error", ex);
}
を:私は何をしたい、そのようのApplication_Errorメソッドで例外を未処理のログです。どんな助けもありがとう。おそらくそれは私が見落としているシンプルなものだと確信しています。
これは良いアプローチのようですが、値に 'var logger = _container.Resolve();を割り当てると、ロガーインスタンスが正しく設定されていないように見えて、log4net.configの設定に従ってログに記録されません。私はApplication_Start()中にコンテナを作成しています...どんな考えですか? –
dolphy
スニペットコードを正常に実行できますか? ILoggerは正常に解決されましたか?アプリケーションルートレベルでlog4net.configを持っていますか? log4net.configの設定を確認しましたか? – Crixo
あなたのコードはコンパイルされて正常に動作しますが、ILogger(log4netのネイティブタイプではなく、城の名前空間からのものです)が正しく設定されていないようです。 log4net.configはルートディレクトリにあり、コントローラメソッドで使用するとうまく動作します。問題を二乗する時間を割いていない。 – dolphy