我们在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
我们现在遇到了问题,由于某些测试,fiel 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
。
重命名&#34; the-app_x.log
&#34;到&#34; X the-app_x.log
&#34;修复了问题,即NLog然后重命名并为今天创建一个新的日志文件。
a)确保日志轮换始终有效?
b)如果打开日志文件失败,请将应用程序错误并退出吗?
答案 0 :(得分:1)
这个答案适用于你问题的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
或{{1}的一部分中}或web.config
您可能发现了一个错误。我通过旋转文件日志对我的应用程序开发大量使用NLog,但我还没有经历过这个。我确实在repo中查看了appName.exe.config
的一些代码,它实际上读取了日志路径中的文件,以确定顺序记录文件名和日期。拥有意外的日志文件似乎可能会将其丢弃,但我需要进行一些挖掘以确认这是否真的是问题。我没有在github上的问题跟踪器中看到引用此问题的nlog项目中的任何内容。
来源:https://github.com/nlog/NLog/wiki/Configuration-file#troubleshooting-logging