2012-04-30 150 views
0

經過很多問題,最後我設法爲我的窗口服務配置了log4net。使用log4net記錄多個程序集

我對它很新穎,今天我開始配置它。我有這些疑惑。

1)我需要將它用於多個程序集。假設我有一個組件'A',它被作爲參考組裝在'B'中,它是我的主要組件,在這裏我引用了log4net。我需要記錄組件'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

在appender部分下使用<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引用。現在,如果我在程序集A中創建了一個靜態類,它將使用log4net並且程序集B可以利用它,那麼在這種情況下,log4net dll引用必須添加到程序集B中也。你說的話。 – sunder

+0

你不需要添加log4net dll在DLL B因爲tou會使用dll登錄。 –

+0

感謝羅米爾,我已經解決了問題。 log4net方法的引用僅在當前程序集中添加了說明A。所以我在下面的鏈接中創建了一個類,作爲對稍後將閱讀此文章的人的幫助。 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進行日誌記錄。在彙編A中,我沒有添加log4net引用,現在有沒有在我可以登錄的兩個程序集中添加log4net引用的方法。 在程序集B – sunder

+0

中添加了程序集A作爲參考,因此,您在詢問您是否可以在不引用它所定義的程序集的情況下使用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>