确保NLOG实际记录日志?

时间:2015-03-11 11:06:04

标签: c# nlog

我们在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)如果打开日志文件失败,请将应用程序错误并退出吗?

1 个答案:

答案 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

相关问题