log4net と elmah を動かしたい。コードを AppHost.cs にまとめてみました。
public class AppHost : AppHostBase {
//Tell ServiceStack the name and where to find your web services
public AppHost() : base("Backbone.js TODO", typeof(TodoService).Assembly) { }
public override void Configure(Funq.Container container) {
//...
//Log4Net 1.2.11
log4net.Config.XmlConfigurator.Configure(new FileInfo("log4net.config"));
container.Register(x => new Log4NetFactory(true));
//Elmah
container.Register(x => new ElmahLogFactory(container.Resolve<Log4NetFactory>()));
LogManager.LogFactory = container.Resolve<ElmahLogFactory>();
container.Register<ILog>(x => LogManager.GetLogger(GetType()));
//...
}
Log4net.config、これは現在単なるコンソール ロガーです...
<?xml version="1.0" encoding="utf-8" ?>
<log4net debug="true">
<appender name="TraceAppender" type="log4net.Appender.TraceAppender">
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%method %-5level - %message%newline"/>
</layout>
</appender>
<root>
<level value="DEBUG"/>
<appender-ref ref="TraceAppender"/>
</root>
</log4net>
次に、ロガーが必要な場所:
ILog Logger {get; set;} //injected by ioc
//...
Logger.Info("Print something");
行はエラーなしで呼び出されますが、上記Logger.Info("....");
のコードでは Log4Net も Elmah も出力を出力していません。ServiceStack で log4net または elmah をセットアップした経験がある場合は、私が間違ったことを指摘していただけますか?
編集
FileInfo をフル パスに変更すると、Stefan Egli の提案どおりに機能しました。
または、プロジェクトの log4net.config xml ファイルをクリックし、[プロパティ] ボックスで
「出力にコピー -> 新しい場合はコピー」
それもできます。
すると、次のようなものが出てきます。
Auto-attach to process '[11308] w3wp.exe' on machine 'Desktop' succeeded.
//... printing info now ...
Backbone.Todos.AppHost: Info INFO - TodoService OnGet
//... but then after a coffee break ...
log4net: Hierarchy: Shutdown called on Hierarchy [log4net-default-repository]
// ... Oops, no longer printing any log ...
しばらくアイドル状態だった後、Web アプリがシャットダウンしたようです。次に、Web アプリをクリックすると、log4net が再起動に失敗します...これを防ぐ方法はありますか?
編集2
幸いなことに、NLogに切り替えました...