Как я могу запросить путь к файлу журнала NLog? - PullRequest
10 голосов
/ 07 сентября 2011

Я настроил целевой файл для 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>

Как запросить фактический путь к файловой системе (fileName) этой цели File через API NLog?

Ответы [ 3 ]

10 голосов
/ 13 августа 2012
    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 });
    }
8 голосов
/ 07 сентября 2011

Я только что попытался получить эту информацию с помощью конфигурации api .

enter image description here

К сожалению, похоже, что конфигурация оценивается фактической целью и не разрешается в конфигурации.

Поскольку {basedir} относится к базовому каталогу appdomain, вы можете просто прочитать это значение самостоятельно.

var basedirPath = AppDomain.CurrentDomain.BaseDirectory;
0 голосов
/ 05 декабря 2011

Вы можете использовать API nLog внутри кода вместо файла конфигурации 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
...