求助:NLog无法在Documents等目录生成日志文件怎么解决
NLog无法写入Documents等目录的解决方案
问题描述
我的NLog文件目标配置如下:
"allLogFile": { "type": "file", "fileName": "C:\Users\myUserName\Documents\logs\Log.txt", "archiveFileName": "C:\Users\myUserName\Documents\logs\Log.{#}.txt", "archiveNumbering": "Date", "archiveEvery": "Day", "archiveDateFormat": "yyyyMMdd", "layout": "${longdate}| ${uppercase:${level}}| ${logger}| ${message} ${exception:format=tostring}" }
该配置无法在Documents目录生成日志文件,但改为桌面路径"C:\Users\myUserName\Desktop\logs\Log.txt"可正常工作。尝试Pictures、Downloads、C盘等路径均无效,使用${specialfolder:folder=MyDocuments}\logs\Log.txt路径也失败。已开启"throwConfigExceptions": true但未抛出配置异常,推测是写入阶段的权限或路径问题。
解决方法
确保目录自动创建:NLog默认不会自动创建多级子目录,需在file目标中添加
createDirs: true配置,同时修正JSON路径的转义问题(单反斜杠需改为双反斜杠,或使用正斜杠):"allLogFile": { "type": "file", "fileName": "${specialfolder:folder=MyDocuments}\\\\logs\\\\Log.txt", "archiveFileName": "${specialfolder:folder=MyDocuments}\\\\logs\\\\Log.{#}.txt", "archiveNumbering": "Date", "archiveEvery": "Day", "archiveDateFormat": "yyyyMMdd", "layout": "${longdate}| ${uppercase:${level}}| ${logger}| ${message} ${exception:format=tostring}", "createDirs": true }也可直接使用正斜杠避免转义:
"${specialfolder:folder=MyDocuments}/logs/Log.txt"验证应用权限:
- 普通桌面应用可右键以管理员身份运行,测试是否因权限不足导致写入失败;
- UWP/WPF等受沙箱限制的应用,需在应用清单中声明访问Documents等目录的权限。
启用NLog内部日志排查:添加内部日志配置,查看写入失败的具体原因:
"internalLogLevel": "Warn", "internalLogFile": "C:\\temp\\nlog-internal.log"日志文件会记录NLog运行时的错误信息(如权限拒绝、路径解析错误等),帮助定位问题根源。
内容的提问来源于stack exchange,提问作者Fjalee
相关产品推荐
相关产品推荐

