NLog 4.6.6配置求助:按日期建文件夹、启动时间命名日志文件
修正NLog配置实现按日期文件夹+启动时间文件名及跨天自动切换
问题分析
你当前的配置无法生成日志,核心原因有两点:
cached布局的语法错误,错误地缓存了整个路径且变量嵌套格式不正确,导致NLog无法解析目标路径- 未开启自动创建文件夹的配置,若目标日期文件夹不存在,日志无法写入
正确配置方案
以下配置完全符合你的需求:日志文件夹按当前日期命名,日志文件按程序启动时间命名,跨天运行时自动创建新日期文件夹与对应日志文件:
<target name="logfile" xsi:type="File" fileName="C:\AppLogs\Logs\${date:format=yyyy-MM-dd}\${cached:inner=${date:format=HH.mm.ss}}.log" layout="[${longdate}] ${level:uppercase=false} Assembly: ${processname:fullName=false} Class.Method: ${callsite:includeNamespace=false}: ${callsite-linenumber} ${message}" createDirs="true" />
关键配置说明
createDirs="true":强制NLog自动创建不存在的日期文件夹,避免因文件夹缺失导致日志写入失败- 日期文件夹部分:
${date:format=yyyy-MM-dd}会在每次写入日志时计算当前日期,跨天后自动切换到新的日期文件夹 - 日志文件名部分:
${cached:inner=${date:format=HH.mm.ss}}仅在程序启动时计算一次时间,确保文件名固定为启动时间,不会像原配置那样每秒生成新文件 - XML换行处理:用
替代布局中的\n,符合XML属性的转义规则
原配置错误点解析
- 你之前的配置将整个路径放入
cached中,导致日期文件夹被固定为程序启动时的日期,跨天后无法自动切换,同时XML属性内的变量嵌套格式错误,NLog无法正确解析路径 - 未设置
createDirs="true",若目标文件夹不存在,NLog默认不会创建,直接导致日志无法生成
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

