NLog CurrentDir создает файл в C: \ Windows \ SysWOW64 при запуске приложения через планировщик задач - PullRequest
1 голос
/ 10 июня 2019

У меня .Net Framework 4.7.2 Консольное приложение, работающее в Windows 10 (64-битная версия), которое периодически вызывается через планировщик задач.

Когда задача запускается, файл журнала создается внутри C:\Windows\SysWOW64, если я переключаюсь на ${basedir} вместо ${currentdir}, он создает файл, в котором находится исполняемый файл.

Я озадачен, это правильное поведение, что ${currentdir} создает файлы в C:\Windows\SysWOW64? Прежде чем регистрировать проблему с NLog, я подумал, что сначала нужно проверить SO.

Их документация на ${basedir} или ${currentdir} не устанавливает разницу между двумя и не объясняет, какой вариант использовать, когда.

NLog версия: 4.6.3

Ниже приведен мой файл nlog.config:

<?xml version="1.0" encoding="utf-8" ?>
<!-- XSD manual extracted from package NLog.Schema: https://www.nuget.org/packages/NLog.Schema-->
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xsi:schemaLocation="NLog NLog.xsd"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      autoReload="true"
      internalLogFile="nlog-internal.log"
      internalLogLevel="Info">

  <variable name="format" value="${threadid}|${longdate}|${uppercase:${level}}|${logger}|${message} ${exception:format=tostring}" />
  <variable name="path" value="${currentdir}" /> <!-- Using ${basedir} works -->
  <!-- the targets to write to -->
  <targets>
    <!-- write logs to file -->
    <target xsi:type="Console" name="console" layout="${var:format}" />
    <target xsi:type="File" name="mslog" fileName="${var:path}\mslog-${shortdate}.log" layout="${var:format}" />
    <target xsi:type="File" name="datadaptorlogs" fileName="${var:path}\datadaptor-${shortdate}.log" layout="${var:format}" />
  </targets>

  <!-- rules to map from logger name to target -->
  <rules>
    <logger name="*" minlevel="Trace" writeTo="datadaptorlogs,console" />
    <logger name="Microsoft.*" minlevel="Error" writeTo="mslog" />
  </rules>
</nlog>

1 Ответ

1 голос
/ 10 июня 2019

При ${basedir} NLog ищет корень нашего приложения.

${currentdir} - это рабочий каталог, установленный в процессе, в котором выполняется ваше приложение.

Вы можете установить рабочий каталог - и, следовательно, ${currentdir} - в расписании задач:

enter image description here

...