【问题标题】:C# Best way to avoid duplicate per time slot in log fileC# 避免日志文件中每个时隙重复的最佳方法
【发布时间】:2017-02-22 18:50:09
【问题描述】:

我有一个基于 C# 代码的简单独立日志应用程序,它接受参数并将它们附加到日志文件中。

一些事件多次出现在日志中(由于重试)

在 x 时间段内“跳过”记录重复事件的最佳方法是什么?

(由于仅在事件发生时才调用日志记录应用程序,因此我无法将此数据保存在内存中)

我的第一个想法是保留某种带有事件哈希的文件(不包括时间戳)并在列表中检查它,但我想知道是否有更好的方法来做到这一点,因为我们正在记录很多数据,我担心管理另一个文件,运行哈希函数并搜索我的功能是一个杀手。

【问题讨论】:

  • 您描述的功能超出了简单的日志文件机制。您应该尝试SQLite 并在那里进行日志记录。 "log_message", "log_timestamp" 上的双列索引将使您能够在最后 X 分钟内查询以 Whatever error message 开头的消息,如果没有找到,INSERT .....

标签: c# file logging io


【解决方案1】:

记录器真的不应该编辑所写的内容,因为它不(或至少不应该)知道业务逻辑——例如重试。

如果您不想记录每次重试,请在代码中将记录上移一级,以便仅在所有重试失败后记录。

例如,听起来你有这样的东西(伪代码)

loop retries x number of times
    try action
    did action succeed?
        yes: break out of loop
        no : increment x
             log failure
end of retry loop
... logic continues

当你真正想要的是

set success flag to false
loop retries x number of times
    try action
    did action succeed?
        yes: set success flag to true
             break out of loop
        no : increment x
end of while
is success flag true
    yes: continue
    no : log failure
... logic continues

区别只是将日志移出重试循环。

【讨论】:

  • 我只能控制日志应用程序代码,我无法更改调用记录器的应用程序代码
猜你喜欢
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-07
  • 1970-01-01
  • 2011-01-14
相关资源
最近更新 更多