[英]Logging to stdout vs logging to file from multiple processes simultaneously
我有一个进程(在 python 中),它产生多个进程。 它们都记录到标准输出和文件。
当我运行代码(添加波纹管)时,所有到标准输出的日志都被打乱了,正如我实际上认为会发生的那样。
但是,日志文件看起来非常整洁干净。 所以我然后尝试将 stdout 重定向到一个文件,该文件也很干净。 我也尝试过不同的日志大小,但都产生了相同的结果。
所以我想我在问这里到底发生了什么。 我已经阅读了一些关于流缓冲的内容,但我不确定它是否相关(尽管我可能错了 :))
看起来写入文件是原子的,但它不适用于标准输出,这对我来说似乎有点奇怪。
在 MacOS 上运行 python3.7:
import multiprocessing
import logging.config
config = {
"version": 1,
"formatters": {
"default": {
"format": "%(asctime)s [%(levelname)s] %(threadName)s %(module)s(%(lineno)d): %(message)s"
}
},
"handlers": {
"console": {
"formatter": "default",
"class": "logging.StreamHandler",
"stream": "ext://sys.stdout"
},
"file": {
"formatter": "default",
"class": "logging.FileHandler",
"filename": "/tmp/test.log"
}
},
"loggers": {
"my_logger": {
"handlers": ["console", "file"],
"level": "DEBUG"
}
}
}
logging.config.dictConfig(config)
def foo(char):
my_logger = logging.getLogger('my_logger')
import os, time
msg = f'{os.getpid()}' + (char * 2400)
s=time.time()
while 1:
my_logger.info(msg)
if time.time() - s > 5:
break
ps = [multiprocessing.Process(target=foo, args=(chr(i+64),)) for i in range(10)]
for p in ps:
p.start()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.