【发布时间】:2013-05-03 10:17:28
【问题描述】:
我正在使用logging 模块记录来自应用服务器的消息。更具体地说,我使用 StreamHandler 将消息记录到 stdout/stderr,并使用 Supervisord 将这些消息记录到文件中(因为服务器进程由 Supervisord 监控)。
我的主要问题是,日志文件中的消息顺序是否总是真实地反映了代码的执行顺序?例如,如果在日志文件中,消息A: this is log msg A 出现在消息B: this is log msg B 之前,那么我们能否100% 确定记录消息A 的代码行是在记录消息@ 的代码行之前执行的987654327@,即使日志文件中两条消息的时间戳相同?
【问题讨论】:
-
你在运行单线程吗?然后是的,日志条目将按照代码发出的顺序输入到文件中。使用线程,锁定开始发挥作用,首先拥有锁定的线程获胜。即使这样,来自同一线程的日志消息也永远不会以不同的顺序写出,它们只会与来自其他线程的消息混合在一起。
-
@MartijnPieters 谢谢!有用的信息。您知道任何确保消息按时间顺序排列的模块/工具吗?
-
@AmitTripathi:按时间顺序定义。如果两个线程同时记录,那么第一个获得锁的线程将首先记录。然后仍然按时间顺序输入条目(丢失锁的线程必须等待片刻才能成功完成日志记录)。
标签: python logging supervisord