2016-10-07 14 views
1


私は(コンソールウィンドウで実行)ナンシーセルフホスティングアプリケーションログ私がやっている何

私の問題
を書いています、私は得ることができません私のコンソールウィンドウに何かを記録するlog4net。 (具体的に - NancyFxサービスをホスティングしているとき、私はこれが仕事を得ることができない、私は他のコンソールアプリケーションでlog4netのを使用して問題はありません。)

私はに加えて、以下のページ(見てきました
を研究してきた何

検索のStackOverflow):
http://www.philhack.com/wire-up-log4net-to-nancy/ https://lookonmyworks.co.uk/2012/03/14/logging-unhandled-exceptions-with-nancy/

私log4netの設定

<?xml version="1.0" encoding="utf-8"?> 
    <configuration> 
     <configSections> 
     <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
     </configSections> 

     <log4net> 
     <appender name="Console" type="log4net.Appender.ConsoleAppender"> 
      <layout type="log4net.Layout.PatternLayout"> 
       <conversionPattern value="%date %-5level: %message%newline" /> 
      </layout> 
     </appender> 

     <root> 
      <level value="DEBUG"/> 
      <appender-ref ref="Console"/> 
     </root> 
     </log4net> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/> 
    </startup> 
</configuration> 

log4netの

public class MyNancyModule : NancyModule 
{ 
    private static ILog Logger = LogManager.LogFactory.GetLogger(typeof(MyNancyModule)); 

    public MyNancyModule() 
    { 
     Logger.Debug("This is a test"); 
    } 
} 

の私の使い方私の問題の例(再び)
私は上記の構成を使用して、私のコンソールウィンドウには、何もログに記録するlog4netのを取得することはできません。上のブログ記事から、Nancyがlog4Netを妨害するエラー処理パイプラインを設定することを何かしていることは理解していますが、何をやっているのか、どういうことが分かりません。

コンソールウィンドウにログオンするために、log4Netが自己ホスティングナンシーサービスで動作するようにするにはどうすればよいですか(特に内蔵診断ページへのログには興味がありません)。

他のすべてのアプリケーションと同じようにIOCコンテナにログマネージャを追加しようとはしませんでしたが、クラスごとに静的なログマネージャがあり、クラス固有のログが得られます。ブートストラッパークラスに由来しています。

私はlogManagerにServiceStack.Logging.Log4Netを使用していることを忘れていました。また、私がしなければ私の例で動作するように表示されませんように私はlog4netのを使用

private static ILog Logger = LogManager.GetLogger(typeof(ApiReverseProxyModule)); 
+0

ここで、/いつあなたはlog4net構成をロードしますか? – stuartd

+0

@stuartdあなたの質問は関連していました - 私のメインメソッドに 'LogManager.LogFactory = new Log4NetFactory(configureLog4Net:true);'行を追加するのを忘れました。担当者が必要な場合は、これを回答として追加して、そのようにマークします。ありがとう! – Jay

+0

答えは少し薄いようですが、ありがとう:) – stuartd

答えて

0

Stuartdが私に正しい方向を指してくれたことに感謝します。私が言及したブログは少し誤解を招くようだった - ので、私は常にnullログファクトリを使用していた - 私は私のメインメソッドから

LogManager.LogFactory = new Log4NetFactory(configureLog4Net: true); 

がありませんでしたが判明しました。

これはNancyFXとは関係ありません。

これが誰かを助けることを願っています!

1

まずあなたがXmlConfigurator一度定義する必要があります。

XmlConfigurator.ConfigureAndWatch(new FileInfo(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile)); 

とすることができますがクラスで使用してください:

var log = LogManager.GetLogger("ClassName"); 

log.Debug("What you want..."); 
+0

実際にNancyFxを使ってこれをやろうとしましたか?私はちょうど私のメインファイルに示唆したコードを追加しようとしましたが、それは何の違いもありませんでした。標準のコンソールアプリケーション(上記の設定と同様)では正常に動作しますが、NancyFxサービスをホストしている場合は動作しません。 – Jay

+0

OK、ASP.NETアプリケーションの場合、動作が異なるため、別のAppenderを使用する必要があります。 TraceAppenderはあなたの選択です:http://interactivelogic.net/wp/2010/02/aspnet-logging-to-output-window-with-log4net/ –

関連する問題