从 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="|-> $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 -> Change settings for all users -> check the Run this program as an administrator
将 exe 属性更改为以管理员身份运行。或者暂时以管理员身份运行,你可以右击然后Run as administrator
。
【讨论】:
听起来像是 Windows Vista(和更新版本)用于处理不符合标准的旧版应用程序的默认 shim。这个 shim 创建了一个沙箱,因此应用程序认为它可以在任何地方写入,但它只是写入其隔离的沙箱。以上是关于从 msi 安装程序安装时,NLog 不写入日志的主要内容,如果未能解决你的问题,请参考以下文章