如何查询NLog日志文件的路径?

时间:2011-09-07 10:31:16

标签: .net 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查询此fileName目标的实际文件系统路径(File)?

3 个答案:

答案 0 :(得分:9)

    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 });
    }

答案 1 :(得分:8)

我刚尝试通过configuration api获取此信息。

enter image description here

可悲的是,看起来配置是由实际目标评估的,并且未在配置中解析。

由于{basedir}指的是appdomain基目录,因此您可以自行读取此值。

var basedirPath = AppDomain.CurrentDomain.BaseDirectory;

答案 2 :(得分:0)

您可以在代码中使用nLog的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