我应该在操作前还是操作后记录日志?

30 投票
4 回答
4829 浏览
提问于 2025-04-16 09:17

我在考虑在一个操作周围记录日志的地方。这里有两种不同的风格。第一种是在操作之前记录日志。

之前:

log.info("Perform operation XXX")
operation()

而另一种风格是在操作之后记录日志。

之后:

operation()
log.info("Operation XXX is done.")

使用之前的风格,日志记录会说明接下来要做什么。这种风格的优点是,当出现问题时,开发者可以很容易地发现,因为他们知道程序现在在做什么。但是缺点是,如果操作内部出现了问题,比如一个函数调用被卡住了并且永远没有返回,你就无法通过查看日志记录来知道操作是否正确完成。

使用之后的风格,你可以确定操作已经完成。

当然,我们也可以把这两种风格结合起来使用。

两者结合:

log.info("Perform operation XXX")
operation()
log.info("Operation XXX is done.")

但我觉得这样有点啰嗦,会产生重复的日志记录。所以,我想问的是,什么样的日志记录风格比较好?我想知道你们的看法。

4 个回答

1

也许你可以用类似于“尝试-捕获”的方法?这里有一个简单的Python例子:

try :
    operation()
    log.info("Operation XXX is done.")
except Exception:
    log.info("Operation xxx Failed")
    raise Exception() # optional : if you want to propagate failure to another try catch statement and/or crash eventually. 

操作将会开始执行。

如果没有出错(也就是没有抛出异常),你会在日志中看到成功的消息。

如果出错了(比如磁盘满了或者你正在尝试做的事情失败了),异常会被捕获,这时你会看到失败的消息。

这样日志就更有意义了。你可以用一句话来记录操作的结果,知道操作是否成功。这是最好的选择。

哦,对了,你还可以在出错时添加一些代码,让它在失败时执行。

希望这能帮到你。

3

这完全取决于你想记录什么。如果你想知道代码运行到要执行某个操作的那一刻,那就记录那个时刻。如果你想确认操作是否成功,那就等操作完成后再记录。如果你想同时记录这两者,那就都记录。

33

我通常会使用两种不同的日志级别

第一个我设置为“调试”级别,第二个设置为“信息”级别。这样,正常运行的机器只会记录正在进行的操作,但我可以开启调试日志,查看在出错之前它尝试做了什么。

撰写回答