python3 多logger写入同一个文件,RotatingFileHandler滚动覆盖报错 PermissionError?

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

回到顶部