2011-09-07 155 views
9

我已經配置了一個文件目標NLOG如下:如何查詢NLog日誌文件的路徑?

<targets> 
    <target name="asyncFile" xsi:type="AsyncWrapper"> 
    <target xsi:type="File" name="logfile" fileName="${basedir}/Logs/${shortdate}.log" 
      layout="${longdate} ${uppercase:${level}} ${message}" /> 
    </target>  
</targets> 

如何通過NLOG的API查詢此File目標的實際文件系統路徑(fileName)?

+0

你是什麼要求?你爲什麼需要知道路徑? – ccellar

+3

@ckeller這很有趣,因爲我不一定知道'$ {basedir}'計算的是什麼。 – aknuds1

回答

8

我剛剛試圖通過configuration api獲取此信息。

enter image description here

可悲的是它看起來像配置由實際的目標評估,並在配置上沒有得到解決。

由於{basedir}指的是appdomain基本目錄,您可以簡單地自行讀取此值。

var basedirPath = AppDomain.CurrentDomain.BaseDirectory; 
0

你可以使用n日誌的API的代碼中,而不是一個XML配置文件中。然後,在您的應用程序中,將日誌的文件路徑分配給一個變量,並將該變量用作目標文件名。您可以訪問該變量,或隨時更改它(我的代碼片段,在這裏,定義在類的內部)。

Private MainNlogConfig As New LoggingConfiguration() 
Dim localrule As New LoggingRule(*, LogLevel.Info, locallogtarget) 
MainNlogConfig..AddTarget("file", locallogtarget) 

With locallogtarget 
    .Layout = "${longdate} ${logger} ${message}" 
    .FileName = appdir & appName & ".log" '----->LOOK HERE! 
End With 
LogManager.Configuration = MainNlogConfig 
8
private string GetLogFile() 
    { 
     var fileTarget = LogManager.Configuration.AllTargets.FirstOrDefault(t => t is FileTarget) as FileTarget; 
     return fileTarget == null ? string.Empty : fileTarget.FileName.Render(new LogEventInfo { Level = LogLevel.Info }); 
    }