从 msi 安装程序安装时,NLog 不写入日志

Posted

技术标签:

【中文标题】从 msi 安装程序安装时,NLog 不写入日志【英文标题】:NLog does not write logs when installed from msi setup 【发布时间】:2021-12-17 09:26:03 【问题描述】:

我被这个用于生产安装程序的 NLog 卡住了。 我有一个设置项目来创建 .msi 文件,除了 NLog 之外一切正常,因为它不会在 /logs 文件夹中创建日志。使用调试或发布模式从 Visual Studio 运行应用程序,它只是写入日志。我无法弄清楚这个问题。

附:配置嵌入到 App.config 中。我注意到它通过使用绝对路径更改basedir/logs而不是exe文件所在的位置来写入其他位置。

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <variable name="appDataLogDir" value="$basedir/logs" />
    <targets async="true">
      <target archiveEvery="Day" openFileFlushTimeout="2" maxArchiveFiles="30" name="logFile" type="File" fileName="$appDataLogDir/log_$shortdate.txt" layout="|-&gt; $longdate:universalTime=true|$level|$message$onexception:inner=|$exception:format=tostring" />
    </targets>
    <rules>
      <logger name="*" minlevel="Trace" writeTo="logFile" keepFileOpen="false" encoding="UTF-8" />
    </rules>
  </nlog>

【问题讨论】:

检查 nlog 配置并查看要写入的文件的位置,并查看用户/进程(运行应用程序的身份)是否有权访问该 nlog 文件夹 我更改了文件夹的访问权限,将其设置为所有人,但仍然没有任何反应。 您可以在问题中包含nlog.config 吗?也许考虑使用$specialfolder 将日志文件写入 ProgramData。另见:github.com/NLog/NLog/wiki/Logging-troubleshooting 【参考方案1】:

我可以通过以管理员身份运行 exe 文件来修复它。运行该程序的程序是 Windows 8。我认为默认情况下我的setup.msi 安装时不是管理员,或者 Windows 用户不是管理员,或者它现在是管理员,但不是原来的管理员。

要使其成为半永久性的,您可以通过右键单击 exe 然后Compatibility tab -&gt; Change settings for all users -&gt; check the Run this program as an administrator 将 exe 属性更改为以管理员身份运行。或者暂时以管理员身份运行,你可以右击然后Run as administrator

【讨论】:

听起来像是 Windows Vista(和更新版本)用于处理不符合标准的旧版应用程序的默认 shim。这个 shim 创建了一个沙箱,因此应用程序认为它可以在任何地方写入,但它只是写入其隔离的沙箱。

以上是关于从 msi 安装程序安装时,NLog 不写入日志的主要内容,如果未能解决你的问题,请参考以下文章

msi删除文件而不是替换它们

无法使用 Nlog 将日志写入 Azure

C# 使用NLog记录日志

Nlog不会写入Windows服务中的日志文件

NLog 不创建日志文件

使用具有多个线程的Nlog发出在数据库中写入日志