2016-02-05 47 views
15

除非我完全忽略它,否則我的印象是NLog documentation在它的例子中使用了${basedir},而沒有解釋它的位置應該是什麼。

我在哪裏可以找到信息,列出所有可能的選項和有意義的描述?

我有這個配置中定義:

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" throwExceptions="true"> 
    <targets> 
    <target name="file" xsi:type="File" 
       layout="${longdate} ${logger} ${message}" 
       fileName="${basedir}/logs/${shortdate}.txt" 
       keepFileOpen="false" 
       encoding="iso-8859-2" /> 
    </targets> 
    <rules> 
    <logger name="*" minlevel="Debug" writeTo="file" /> 
    </rules> 
</nlog> 

它的工作原理,據我所知道的,但我還沒有得到它在登錄任何一個線索。

+1

記住要將Visual Studio中的文件屬性更改爲NLog配置文件以複製到輸出目錄=>始終。替代注入nlog-config到app.config https://gist.github.com/Chrisso/1703644 –

回答

14

${basedir} - 應用程序運行的目錄。 我認爲,你會發現它有幫助: https://github.com/NLog/NLog/wiki/Layout-Renderers

+2

所以'bin \ debug'文件夾,如果你是從VS運行它?在這種情況下,它不起作用,因爲我沒有看到任何文件。我沒有得到任何錯誤。 – Spikee

+0

@Spikee您可以通過AppDomain.CurrentDomain.BaseDirectory – galakt

+1

在您的應用程序中檢查它的確是'bin \ debug',但我沒有看到'logs'子文件夾,也沒有看到任何文件。 – Spikee

3

它也取決於平臺。對於常規的.Net項目,它確實是bin或bin/debug等等(取決於你的構建設置)

對於coreclr/aspnet5,它是你的dnx運行時的bin文件夾。這仍在進行中。

2

根據已提供的答案和評論,答案可以概括爲.NET應用程序:

AppDomain.CurrentDomain.BaseDirectory 

對於控制檯或Windows窗體應用程序,該目錄是bin/debug而在Visual Studio中。如果部署了應用程序,則路徑很可能是可執行路徑。

對於Web應用程序(ASP.NET),這將是Web應用程序的根目錄。

看不到任何文件可能由幾個原因觸發,包括:NLog配置錯誤,無法寫入目標文件。爲了揭露這些錯誤,確保NLog.config(或NLOG配置嵌入式的web.config或app.config中內)指定一個內部日誌文件輸出這樣的錯誤:

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     internalLogFile="C:\NLogError\NLog.log"> 

<!-- targets and rules come here --> 

</nlog> 
2

失敗的另一種可能性是,如果你是使用NLog.config,NLog無法找到配置文件。將文件設置爲在您的內部版本中始終複製,並且它將在您的bin目錄中結束,以便NLog可以在運行時找到它。

如果將NLog配置信息複製到App.config中,則不會出現此問題。

+0

我也碰到類似的事情,我需要在我的Visual Studio項目中翻轉「NLog.xsd」(在NLog配置中引用)的副本「複製到輸出」選項,然後才能獲取任何日誌在測試期間在我的「bin/debug」文件夾中寫入。 –