如何在运行时使用NLog获取当前目标文件的路径? [英] How to get path of current target file using NLog in runtime?

查看:486
本文介绍了如何在运行时使用NLog获取当前目标文件的路径?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在下一个配置中使用NLog:

I use NLog with next configuration:

  <targets>
    <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
            layout="${longdate} ${uppercase:${level}} ${message}" />
  </targets>
  <rules>
    <logger name="*" minlevel="Trace" writeTo="f" />
  </rules>

我试图获取FileTargetFileName属性(我检查了集合中是否只有一个FileTarget)

I tried to get FileName property of FileTarget (I check, that there only one FileTarget in collection)

NLog.LogManager.GetCurrentClassLogger().Info("test");
var logFile = (from t in NLog.LogManager.Configuration.AllTargets
                where t is NLog.Targets.FileTarget
                select (NLog.Targets.FileTarget)t).FirstOrDefault();

但是logFile.FileName仅包含文件名模式,与设置中的指定方式完全相同.

But logFile.FileName contains only pattern of file name, exactly how it's specified in settings.

如何获取当前日志文件的运行时路径?

How can I get in runtime path of current log file?

推荐答案

这对我有用:

var fileTarget = (FileTarget) LogManager.Configuration.FindTargetByName("file");
// Need to set timestamp here if filename uses date. 
// For example - filename="${basedir}/logs/${shortdate}/trace.log"
var logEventInfo = new LogEventInfo {TimeStamp = DateTime.Now}; 
string fileName = fileTarget.FileName.Render(logEventInfo);
if (!File.Exists(fileName))
    throw new Exception("Log file does not exist.");

这篇关于如何在运行时使用NLog获取当前目标文件的路径?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆