当应用程序通过任务计划程序 运行 时,NLog CurrentDir 在 C:\Windows\SysWOW64 中创建文件

NLog CurrentDir creates file inside C:\Windows\SysWOW64 when app is run thru Task Scheduler

我在 Windows 10(64 位)上安装了 .Net Framework 4.7.2 控制台应用程序 运行ning,它会定期通过任务计划程序调用。

当任务是 运行 时,日志文件会在 C:\Windows\SysWOW64 中创建,如果我切换到 ${basedir} 而不是 ${currentdir},它会在 exe 所在的位置创建文件位于。

我很困惑 ${currentdir}C:\Windows\SysWOW64 中创建文件的这种行为是否正确?在我记录 NLog 问题之前,我想我应该先检查 SO。

他们的 documentation on ${basedir} or ${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>

使用 ${basedir},NLog 正在搜索我们应用程序的根目录。

${currentdir} 是工作目录,在进程 运行 上设置您的应用程序。

您可以在任务计划中设置工作目录 - ${currentdir} -