我们在 C# 服务中使用 NLog 进行日志记录。文件命名是这样的:
<target name="StdLogFile"
xsi:type="File"
fileName="${LogFolder}/the-app.log"
layout="${longdate} [${uppercase:${level}}] ${message} @(${logger})"
archiveEvery="Day"
archiveNumbering="Date"
archiveDateFormat="yyyy-MM-dd"
archiveFileName="${LogFolder}/the-app_{#}.log"
maxArchiveFiles="14"
autoFlush="true" />
即:
- 当前日志文件将是
the-app.log
- 归档日志将是
the-app_2015-03-10.log
我们现在遇到了问题,由于一些测试,日志文件夹中有一个文件 the-app_x.log
。 这阻止了日志轮换,NLog 完全停止了记录到文件。
详情:
日志文件夹包含:
- 前一天的
the-app.log
- 前一天的
the-app_x.log
the-app_2015-..-..
等旧存档文件
NLog 未能将现有的 the-app.log
旋转到存档名称 TRDS-Import_2015-03-10.log
并且没有 附加到现有的 the-app.log
。
将“the-app_x.log
”重命名为“X the-app_x.log
”解决了这个问题,即 NLog 然后重命名并创建了一个新的日志文件今天。
我们如何:
a) 确保日志轮换始终有效?
b) 如果打开日志文件失败,让应用程序出错并退出?
最佳答案
这个答案是针对你问题的 B 部分的,但如果我根据我作为对你问题的评论发布的一些问题找出 A 部分,我会更新它,如果我有时间,我会自己测试它作为好吧。
您不一定会根据直接打开日志文件使应用程序出错并退出,但是您可以修改您的配置以导致 NLog 抛出异常,您可以在它们冒泡或不处理并允许应用程序时处理这些异常坠毁。此外,您可以通过让 NLog 记录它自己的处理来获取 NLog 的元数据。这可能会帮助您确定流氓文件导致日志轮换失败的原因。
要使 nlog 抛出异常,请将此属性添加到配置的 NLog 根目录中:
<nlog throwExceptions="true">
NLog 可以将内部日志记录到控制台或日志文件:
<nlog internalLogFile="file.txt"> <!--File Logging -->
<nlog internalLogToConsole="true"> <!--Console Logging -->
<nlog internalLogToConsoleError="true"> <!--Log to stderr -->
您还可以这样配置日志记录的详细程度:
<nlog internalLogLevel="Trace|Debug|Info|Warn|Error|Fatal" >
以上都是可以加在根元素上的属性<nlog>
你的 NLog 配置,可能在它自己的文件中 nlog.config
或您的 web.config
的一部分或 appName.exe.config
您很可能发现了错误。我在使用旋转文件日志的应用程序开发中经常使用 NLog,但我还没有体验过。我确实查看了 FileTarget
的一些代码在 repo 中,它实际上会读取日志路径中的文件以确定顺序日志记录文件名和日期。拥有意外的日志文件看起来可能会把它扔掉,但我需要做更多的挖掘来确认这是否真的是问题所在。我在 github 上的问题跟踪器中没有看到引用此问题的 nlog 项目的任何内容。
来源:https://github.com/nlog/NLog/wiki/Configuration-file#troubleshooting-logging
关于c# - 确保 NLOG 确实进行日志记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28984950/