小编wal*_*lum的帖子

为什么python logging RotatingFileHandler 在多个进程中使用时会丢失记录?

最近我意识到我的应用程序生成的日志记录比我预期的要少。经过一些实验,我发现问题出在 RotatingFileHandler 和多处理中。

import logging
from logging import handlers
from multiprocessing import Pool
import os


log_file_name = 'log.txt'
def make_logger():
    logger = logging.getLogger('my_logger')
    logger.setLevel(logging.INFO)

    current_handler_names = {handler.name for handler in logger.handlers}
    handler_name = 'my_handler'
    if handler_name in current_handler_names:
        return logger

    handler = handlers.RotatingFileHandler(
        log_file_name, maxBytes=10 * 2 ** 10, backupCount=0)
    handler.setLevel(logging.INFO)
    handler.set_name(handler_name)

    logger.addHandler(handler)

    return logger



def f(x):
    logger = make_logger()
    logger.info('hey %s' % x)


if os.path.exists(log_file_name):
    os.unlink(log_file_name)

p = Pool(processes=30)
N = 1000
p.map(f, range(N))
with open(log_file_name, 'r') as f: …
Run Code Online (Sandbox Code Playgroud)

python logging multiprocessing

3
推荐指数
1
解决办法
2202
查看次数

标签 统计

logging ×1

multiprocessing ×1

python ×1