2011-09-07 157 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 }); 
    }