У меня .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>