python3 多logger写入同一个文件,RotatingFileHandler滚动覆盖报错 PermissionError?
def get_logger(name): logger = logging.getLogger(name)
# 创建一个handler,用于写入日志文件
# 所有logger的文件名都一样,即存入同一个文件中
filename = Path("logs").joinpath(f'{datetime.now().date()}.log')
fh = RotatingFileHandler(filename, mode='w+', encoding='utf-8', maxBytes=1024*30, backupCount=30)
# 再创建一个handler用于输出到控制台
ch = logging.StreamHandler()
# 定义输出格式(可以定义多个输出格式例formatter1,formatter2)
formatter = logging.Formatter('%(asctime)s %(name)s %(levelname)s %(message)s')
# 定义日志输出层级
logger.setLevel(logging.DEBUG)
# 定义控制台输出层级
# logger.setLevel(logging.DEBUG)
# 为文件操作符绑定格式(可以绑定多种格式例fh.setFormatter(formatter2))
fh.setFormatter(formatter)
# 为控制台操作符绑定格式(可以绑定多种格式例ch.setFormatter(formatter2))
ch.setFormatter(formatter)
# 给logger对象绑定文件操作符
logger.addHandler(fh)
# 给logger对象绑定文件操作符
logger.addHandler(ch)
return logger
if __name__ == "__main__":
log1 = get_logger("log1")
log2 = get_logger("log2")
while True:
log1.info("x" * 1024)
sleep(0.5)
log2.info("y" * 1024)
sleep(0.5)
# 发生异常 PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。
这个问题的原因是多个logger不能操作一个文件吗?
如果是的话应该如果处理这个问题?
回答:
mac下面我测试是没有问题的。这个应该是windows下面的问题?
不过这应该是多进程原因导致,一个进程打开该文件进行写操作,此时还没有关闭(释放)文件。此时另外一个进程也想写入操作,然后就报PermissionError
。
感觉跟多logger写统一日志文件也没有啥关系。重点应该在排查还有是否有多进程?还有哪些进程会同时对该文件有写操作?
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
以上是 python3 多logger写入同一个文件,RotatingFileHandler滚动覆盖报错 PermissionError? 的全部内容, 来源链接: utcz.com/p/938802.html