【问题标题】:NLog avoid repeated lines and set delta timeNLog避免重复行并设置增量时间
【发布时间】:2021-05-20 10:19:45
【问题描述】:

我正在使用 Nlog,但在下面找不到功能。 当然我可以自己制作它们,但由于 NLog 通常会满足所有需求,因此可能会内置所有这些。


每个条目之间的 Delta 秒数

我的布局为 "[${date:format=dd.MM.yyyy HH\:mm\:ss.fff}] (${level:uppercase=true}): ${message}" 所以我得到类似的东西:

[20.05.2021 11:53:33.667] (INFO): --- 20210520_1153 Starting ---
[20.05.2021 11:53:33.784] (INFO): *.cfg not found going for TRIAL LICENCE
[20.05.2021 11:53:33.784] (INFO): Reg Hive found. Verifying
[20.05.2021 11:53:33.784] (INFO): Key length = 3

是否可以自动添加增量时间?所以像下面这样

[20.05.2021 11:53:33.667 - 0.000] (INFO): --- 20210520_1153 Starting ---
[20.05.2021 11:53:33.784 - 0.117] (INFO): *.cfg not found going for TRIAL LICENCE
[20.05.2021 11:53:33.784 - 0.000] (INFO): Reg Hive found. Verifying
[20.05.2021 11:53:33.784 - 0.000] (INFO): Key length = 3

避免重复行(随意)

[20.05.2021 11:53:33.667] (INFO): AAA
[20.05.2021 11:53:33.784] (INFO): AAA
[20.05.2021 11:53:33.784] (INFO): AAA
[20.05.2021 11:53:33.784] (INFO): AAA

变成这样的人

[20.05.2021 11:53:33.667] (INFO): AAA
...

并且能够将其扩展到不止一个级别

[20.05.2021 11:53:33.667] (INFO): AAA
[20.05.2021 11:53:33.784] (INFO): BBB
[20.05.2021 11:53:33.784] (INFO): AAA
[20.05.2021 11:53:33.784] (INFO): BBB

成为

[20.05.2021 11:53:33.667] (INFO): AAA
[20.05.2021 11:53:33.784] (INFO): BBB
...

这样会节省很多字符

提前致谢

帕特里克

【问题讨论】:

    标签: c# logging nlog milliseconds


    【解决方案1】:

    这些特性(尤其是第二个特性)需要持续解析现有日志文件的内容,这将显着影响性能。
    我怀疑 NLog 是否包含重新解析功能,即使有,我也怀疑使用它是否是个好主意。

    在这两种情况下,预处理日志消息的写入要比追溯必须重新解析日志并确定是否应该写入当前日志消息要容易得多。

    【讨论】:

    • 嗯,是的,但是对于重复行排除,您只需存储最后写入的行(或更多行),如果相同则不写入。这就是我在我的代码中所做的。自动完成会很棒
    • @Patrick 并将这些行精确地存储在哪里?不要忘记多个记录器可以写入同一个日志文件。单个记录器实例无法保证在写入不同日志消息之间日志没有更改。这就是为什么从 NLog 的角度来看它没有什么意义。但是,从您的 角度来看,您可能已经保证给定日志文件只有一个源记录器。 NLog 不能盲目地解释这一点,也不能任意逻辑。自己编写它确实比弄清楚如何配置 NLog 对此类功能的任意实现更容易。
    • 你是对的,谢谢!在我的逻辑中,我有一个主日志。此外,可能还有其他一些日志。所以不要写入同一个日志。当我创建一个记录器时,我创建了一个字符串,我将最后写入的日志条目放入其中。我不知道在这个 NL 中可以有多个记录器写入同一个日志。三角洲时间有机会吗?这甚至可以在多日志逻辑中完成
    【解决方案2】:

    您可以使用${processtime} 查看程序启动后的时间。另请参阅:https://github.com/NLog/NLog/wiki/Processtime-Layout-Renderer(用于查看增量)。

    您可以使用WhenRepeated-filter 来阻止重复的日志事件。但最好尽可能避免重复记录(并确保已正确配置记录规则)。另见:https://github.com/NLog/NLog/wiki/WhenRepeated-Filter

    【讨论】:

    • 感谢您的帮助。让我们看看这两点:(1。)我想知道行之间的增量时间,而不是从一开始。 (2.) 请您详细说明这个概念吗?我不清楚是我处理这件事更好还是让 NLog 去做更好。
    • 对于第一点,我只是用我的眼睛看到两次之间的增量。对于第二点,whenRepeated 仅用作无法修改应用程序的最后手段。
    • 第一点,当我需要检查数千或数百万个条目时,我的眼睛是不够的。甚至我的大脑也没有。至于第二个,请确认我的理解,即最好不要在 LONG 中实施任何字符保存策略,因为这会减慢日志写入过程。最好采取不同的行动,明智地选择将哪些消息定向到日志。
    • @Patrick 对于在大型系统中收集应用程序指标,我可能会有专门的指标收集器保存在时间序列数据库中,然后有一个 Grafana-Dashbord(而不是依赖于在日志语句上)。是的,如果您有能力调整应用程序,那么最好删除重复的日志记录,而不是事后过滤。
    猜你喜欢
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 2016-09-06
    • 1970-01-01
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多