2

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に切り替えました...

4

1 に答える 1

3

Elmah は例外ログ用であるため、これまでに投稿した内容に基づいて、elmah ログに何も表示されないと思います。Log4net はおそらく構成ファイルを見つけることができません。これで問題が解決するかどうかを確認するために、フル パスを使用してみてください。その場合は、正しいパスを動的に取得する方法を理解する必要があります。

于 2012-09-10T10:51:47.250 に答える