当应用程序通过任务计划程序 运行 时,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}
-
我在 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}
-