2012-10-15 55 views
1

配置XML文件和文本日誌文件的位置,我有一個項目,包括10個dll文件,每個DLL使用log4net的記錄。該項目不是由我開始的,我是這樣的,我需要繼續。因爲這是我第一次與log4net的工作,我想知道如何獲得,在運行時,配置文件(XML)和日誌文件(其中記錄器寫入日誌文件)。我使用斷點停止應用程序的執行,我希望能夠使用快速監視窗口來獲取這些參數。log4net的:在運行時

感謝您的幫助。

回答

2

就個人而言,我想你可能要對這個錯誤的方式,你會得到更好的嘗試看看log4net的是如何配置的,並從中確定它記錄的信息。

通常的開始位置是app.config文件,它可能包含log4net配置本身,或者對另一個外部文件的引用,但配置也可以在運行時完全完成,所以不能保證甚至存在一個配置文件,但你可以試着看看

log4net.Config.XmlConfigurator.m_repositoryName2ConfigAndWatchHandler["log4net-default-repository"] 

這可能會告訴你配置文件的位置。

的文件名是tricker,因爲

  • 有可能是沒有文件,因爲日誌可以去到另一個設備(例如控制檯或數據庫)
  • 有可能是沒有文件,因爲日誌功能。
  • 您可以登錄到兩個或多個文件
  • 文件名可能取決於類/ DLL
  • 記錄可以爲一個類和其他殘疾啓用。
0

至於我的DLL必須返回唯一的例外。應用程序可以使用log4net或其他loger並記錄dll的異常。 log.config的路徑通常存儲在app.config appSettings中。

你可以嘗試讓DLL裏面的東西一樣

const string RELATIVE_LOGGER_CONFIG_FILE_PATH="log.config"; 
string directory=System.IO.Path.GetDirectoryName(Assembly.GetCallingAssembly().Location); 
return System.IO.Path.Combine(directory, RELATIVE_LOGGER_CONFIG_FILE_PATH) 

,但我認爲是不正確。只需從DLL中返回異常。

PS爲log4net的

log4net.Config.XmlConfigurator.Configure(new FileInfo(configFilePath)); 
+0

謝謝您的回答。我的主要問題是找到實際的日誌文件(我找不到它)。我需要一種方法在運行時獲取當前日誌文件的完整路徑,並且不太重要,但仍然希望在運行時獲取當前的xml配置文件路徑。你能幫我解決這個問題嗎? –

+0

private static string _relativeLoggerConfigFilePath = ConfigurationManager.AppSettings [RELATIVE_LOGGER_CONFIG_FILE_PATH]; string directory = System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly()。Location);返回System.IO.Path.Combine(目錄,_relativeLoggerConfigFilePath); – Frank59

1

下面這段代碼設置的配置文件是類似的東西樣本:

public static void ChangeRemoteAddress(System.Net.IPAddress remoteAddressIp) 
    { 
     var hier = log4net.LogManager.GetRepository() as Hierarchy; 
     if (hier == null) 
     { 
      Console.WriteLine("Unable to change Syslog filename, null hierarchy"); 
      return; 
     } 
     var sysLogAppender = 
      (SyslogAppender)hier.GetAppenders(). 
             First(appender => appender.Name.Equals("UdpAppender", 
              StringComparison.InvariantCultureIgnoreCase)); 

     if (null == sysLogAppender) 
     { 
      Console.WriteLine("Unable to change Syslog filename, appender not found"); 
      return; 
     } 
     sysLogAppender.RemoteAddress = remoteAddressIp; 
     sysLogAppender.ActivateOptions(); 
    } 

我得到「層次」,然後可以得到追加程序並檢查一個我想通過它的名字。就我而言,我希望能夠以編程方式更改我的UDP appender的遠程地址,但是您可以通過這種方式處理任何預定義的「設置」。如果您使用自定義的「設置」,則會有點麻煩,但這應該會讓您順利進行。

所以,這將讓你訪問XML配置文件(作爲一個對象)。例如,您的滾動文件appender的日誌文件的文件名將以類似的方式訪問。

+0

log4net.LogManager.GetRepository()。GetAppenders()返回一個包含零元素的IAppender數組。任何想法爲什麼? log4net可能不會在任何地方寫任何日誌信息? –

相關問題