2013-04-11 103 views
12

我使用Nlog用於特定DLL中的日誌記錄目的。該DLL然後在另一個應用程序中使用(它使用System.Reflection.Assembly.LoadFrom(path + a.dll)動態加載)。我手動將Nlog.dll和Nlog.config文件放在Path文件夾中,應用程序正常執行,但它不記錄任何消息。使NLog.config文件從(d: dev)加載文件而不是「 bin debug 」

但是,當我繼續並將Nlog.config文件手動放入應用程序目錄(\bin\debug\)中時,會記錄消息。

有人可以讓我知道如何將Nlog.Config的搜索位置指向除\bin\debug\以外的其他目錄(d:\dev)。

回答

31

以下是我如何將Nlog的配置更改爲指向執行程序集文件夾中的Nlog.config文件。

string assemblyFolder = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 
NLog.LogManager.Configuration = new NLog.Config.XmlLoggingConfiguration(assemblyFolder + "\\NLog.config", true); 
+1

你可以使用Path.Combine(assemblyFolder,「NLog.config」) – Tempeck 2017-06-09 12:20:39

0

NLog配置需要駐留在動態提取a.dll的應用程序所在的文件夾中。 如果您正在進行調試,那麼將其放入bin \ debug中時會出現問題。 如果您使用的是Visual Studio,請嘗試將nlog.config設置爲「始終複製」,並且它應該放在您需要的位置。

+0

感謝回覆@jim。我確實在應用程序X的項目'a'中將Nlog.config設置爲'始終複製',並將其複製到應用程序X的'\ bin \ debug \'文件夾中。但是我在全新應用程序中使用a.dll (Y),並希望它進入應用程序Y的「bin/debug」或進行更改,以便在'd:\ dev'文件夾中查找Nlog.config – 2013-04-11 20:46:36

5

請參閱NLog wiki上的Configuration file locations

基本上方式NLOG所在的配置是:

  • 標準的應用程序配置文件(通常applicationname.exe.config)
  • applicationname.exe.nlog在應用程序的應用程序的目錄
  • NLog.config目錄
  • NLog.dll所在目錄中的NLog.dll.nlog(僅當NLog不在GAC中時)
  • NLOG_GLOBAL_CONFIG_FILE指向的文件名環境變量(如果定義,僅限NLog 1.0 - 支持在NLog 2.0中刪除)

沒有其他方法可以做到這一點。

+1

*有一種方法可以執行此操作[見上面](http://stackoverflow.com/a/16062987/11635) – 2016-03-08 13:26:15

2

我發現

NLog.LogManager.Configuration = new NLog.Config.XmlLoggingConfiguration(logFilePath, true); 

實際上指向的記錄器將被記錄到,而不是配置文件中的文件。關於這個偉大的事情是,你可以定義日誌文件的路徑,而不需要知道ExecutingAssembly - 這個使用ExcelDNA等時特別有用的XLL動態加載組件作爲一個比特流,所以

Assembly.GetExecutingAssembly().Location 

拋出異常。

相關問題