我为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
)?
答案 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获取此信息。
可悲的是,看起来配置是由实际目标评估的,并且未在配置中解析。
由于{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