【问题标题】:Make sure NLOG actually does logging?确保 NLOG 确实进行日志记录?
【发布时间】:2015-05-13 03:27:33
【问题描述】:

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

【问题讨论】:

  • 希望对您有所帮助stackoverflow.com/questions/8036681/…
  • @user3240361 - 不,它没有帮助。我的配置没问题,它做了它应该做的事情,除非在日志文件夹中有一个“流氓”文件。 (那是一个相当不起眼的问题。)我不太明白这与链接的问题有什么关系,对不起。
  • 只是为了澄清一下,只有当文件出现在与您的命名方案不匹配的日志目录时才会发生这种情况?在其他任何情况下都会发生这种情况吗?
  • @JNYRanger:我不能说“只有”,我可以肯定地说,带有_x.log 后缀而不是正确日期后缀的文件的存在搞砸了。将此文件重命名为其他内容可以修复它,即轮换旧日志并创建新日志文件。
  • 明白了。好吧,我为您的问题的错误和退出部分发布了答案,但我需要进行一些挖掘以确定轮换问题。我觉得这与使用归档功能和顺序日志文件编号的组合有关,因为它读取目录以确定下一个编号。

标签: c# nlog


【解决方案1】:

此答案适用于您问题的 B 部分,但如果我根据我作为 cmets 发布的关于您的问题的一些问题找出 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 配置的根元素 &lt;nlog&gt; 的所有属性,可能在它自己的文件 nlog.config 或您的 web.configappName.exe.config 的一部分中

您很有可能发现了一个错误。我在使用旋转文件日志的应用程序开发中经常使用 NLog,但我还没有体验过。我确实浏览了 repo 中FileTarget 的一些代码,它实际上读取了日志路径中的文件以确定顺序日志文件名和日期。拥有意外的日志文件看起来可能会将其丢弃,但我需要进行更多挖掘以确认这是否真的是问题所在。对于引用此问题的 nlog 项目,我在 github 上的问题跟踪器中没有看到任何内容。

来源:https://github.com/nlog/NLog/wiki/Configuration-file#troubleshooting-logging

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 1970-01-01
    • 2017-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多