是否保证日志消息按时间顺序排列?

MLi*_*ter 5 python logging supervisord

我正在使用该logging模块记录来自应用程序服务器的消息。更具体地说,我使用StreamHandler将消息记录到stdout / stderr,并用于Supervisord将这些消息记录到文件中(因为服务器进程由Supervisord)。

我的主要问题是,日志文件中的消息顺序是否总是真实地反映代码的执行顺序?例如,如果一条消息A: this is log msg A出现在B: this is log msg B日志文件中的消息之前,那么我们可以100%确定记录消息A的代码行是在记录消息的代码行之前执行的B,即使两条消息中的时间戳都在日志文件是一样的吗?

bba*_*les 4

你不能100%确定,我很确定。

尽管日志记录模块在写入输出文件之前锁定输出文件,但如果您正在运行多个线程或进程,则如果其他几个线程尝试在大约相同的时间执行相同的操作,则无法保证您调用的代码logging.warning("A")或其他内容实际获取锁时间。

另请参阅日志记录文档及其来源。我们看到它使用,文档threading.RLock对此说:

如果多个线程被阻塞等待直到锁被解锁,则一次只有一个线程能够获取锁的所有权。在这种情况下没有返回值。

我们不能完全确定哪个线程首先获得锁,这就是问题所在。