2012-04-30 17 views
0

多くの問題の後、最終的に私のウィンドウサービス用のlog4netを構成することができました。log4netを使用して複数のアセンブリをログに記録する

私はかなり新しく、今日は構成を開始しました。私はこれらの疑いの下にある。

1)これを複数のアセンブリに使用する必要があります。私はlog4netのリファレンスを持っている私のメインアセンブリであるアセンブリ 'B'のリファレンスとして追加されたアセンブリ 'A'を持っているとします。アセンブリ 'A'と 'B'の両方をログに記録する必要があります。

2)私のアプリケーションはマルチスレッドであり、多くのスレッドを使用します。では、log4netはスレッドセーフですか?

3)私はこのapp.configの下の設定を使用しています。私はそれの使用が何であるかをあまり知らない。しかし、私は不要なパラメータを使用したくありません。問題ではない

<log4net> 
    <root> 
     <level value="DEBUG"/> 
     <appender-ref ref="LogFileAppender"/> 
    </root> 
    <appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <param name="File" value="C:\logs\log.txt"/> 
     <param name="AppendToFile" value="true"/> 
     <rollingStyle value="Size"/> 
     <maxSizeRollBackups value="10"/> 
     <maximumFileSize value="100KB"/> 
     <staticLogFileName value="true"/> 
     <layout type="log4net.Layout.PatternLayout"> 
     <param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n"/> 
     </layout> 
    </appender> 
</log4net> 
+0

あなたの質問がexcactlyは何? – LueTm

+0

ポイント1と2で正確に指定された質問 – sunder

+0

次回は疑問符(?)を使用してください。 – LueTm

答えて

1

アペンダーセクションの下で<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />を使用してください。私は、ロギングパフォーマンスを向上させる。

log4netはスレッドセーフです。

<maximumFileSize value="10MB" /> //For 100 Kb configuration there will be lot of files. 

<datePattern value="_yyyyMMdd" /> //日付ごとに新しいファイルを作成するためにロガーにヒントを与えます。

Loggerの静的クラスを作成し、使用するすべてのアセンブリから静的関数を呼び出します。ロギング用

サンプルクラス:

public static class Logger 
    { 
     static Logger() 
     { 
      XmlConfigurator.Configure(); 
     } 

     public static void Log() 
     { 
      string methodName = new System.Diagnostics.StackFrame(1, true).GetMethod().Name; 
      string moduleName = new System.Diagnostics.StackFrame(1, true).GetMethod().ReflectedType.FullName; 

      var appLog = LogManager.GetLogger(loggername); 
      appLog.Error(...); 

     } 
    } 
+0

私は同じことをしていた返信をありがとう。アセンブリBのリファレンスとして追加されたアセンブリAのlog4net参照を追加したとしましょう。ここで、log4netを使用するアセンブリAで静的クラスを作成し、アセンブリBがこの場合log4net dll参照をアセンブリBに追加する必要がありますまた、あなたが言うこと。 – sunder

+0

touはdll Aを使用してログするので、dll Bにlog4net dllを追加する必要はありません。 –

+0

Romilありがとう、私は問題を解決しました。 log4netメソッドのリファレンスは、現在のアセンブリでのみ終了します。だから私は後でこの記事を読む誰かのための助けとして、下のリンクで提案されたクラスを作成しました。 http://actcode.com/2009/11/net-application-logging-with-log4net-in-console-file-database/ – sunder

0
  1. 。アセンブリBでいつものようにILogを使用してください。
    アプリケーションの有効期間内にConfigure()を一度呼び出すようにしてください。
  2. はい。
  3. 私はlog4netに慣れておくことをお勧めします。簡単なgoogle searchまたはdocsを見ると、このトリックを行う必要があります。
+0

私は今やっています。私はアセンブリBで追加された参照を作成し、そのオブジェクトILOGをログに使用しました。アセンブリでは、私はlog4net参照を追加していないし、両方のアセンブリでlog4net参照を追加しなければログに記録できるという方法があります。 アセンブリAはアセンブリBの参照として追加されます。 – sunder

+0

したがって、定義されているアセンブリを参照せずに 'ILog'を使用できるかどうかを尋ねていますか?答えは明らかに 'いいえ'です... –

+0

アセンブリBではlog4net dllを参照しています。アセンブリAを記録するには、log4net参照をもう一度追加する必要があります。 – sunder

0
<root> 
     <level value="DEBUG"/> 
     <appender-ref ref="LogFileAppender"/> 
    </root> 

それだけでデバッグモードでログインし、その設定に次のエントリを行います:

<root> 
     <level value="ALL"/> 
     <appender-ref ref="LogFileAppender"/> 
    </root> 
関連する問題