通常,我们的日志是这样写的:
_code_log_file = os.path.join(BASE_DIR, 'logs', 'code.log')
_code_log_handler = TimedRotatingFileHandler(_code_log_file, when="D")
_code_log_formatter = logging.Formatter('%(levelname)s %(pathname)s->func:%(funcName)s line:%(lineno)d %(message)s %(asctime)s')
_code_log_handler.setFormatter(_code_log_formatter)# 此处设置logger名称,否则默认的会和tornado的logger相同而使得下方设置的错误等级被轻质更新为info
code_log = logging.getLogger('code-log')
code_log.setLevel(logging.INFO)
code_log.addHandler(_code_log_handler)
这样写,一般情况下不会有问题,即使程序中使用了多线程写日志也不会导致日志丢失。(logging是线程安全的)
但是,实际项目中,为了最大量的利用CPU,我们需要启动多个python进程,这个时候,这样写日志就会出问题了。当有多个进程同时写同一个日志文件时,就会出现覆盖而导致日志信息丢失的问题。
对于这样的问题,通常有两种方案:
一. 为每个进程分配不同的文件
原理:规避了多个进程写同一个文件