当使用Flask集成日志logging后,使用RotatingFileHandler进行日志设置时,当文件大小超过设置出现的问题解决。
日志配置如下:
from logging.handlers import RotatingFileHandler
# 创建日志记录器, 指明日志保存的路径, 每个日志文件的最大大小,保存日志的文件上限个数
file_log_handler = RotatingFileHandler("logs/log", maxBytes=1024 * 2, backupCount=10)
文件写满后,需要更换文件时出现PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。
PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。
问题的原因在于:flask 在执行网络请求时,会为请求端分配单独进程进行处理。logging模块本身是线程不安全的,那么如何解决多个线程对同一日志文件进行记录的问题呢。
Python强大的库绝不是吹的。
concurrent-log-handler
是专门针对logging模块进程不安全问题做的一个封装,
解决步骤如下:
安装模块pip install concurrent-log-handler
把导入的类改变一下:
from concurrent_log_handler import ConcurrentRotatingFileHandler
使用ConcurrentRotatingFileHandler
这个类创建记录器
file_log_handler = ConcurrentRotatingFileHandler("logs/log", maxBytes=1024 * 2, backupCount=10)
这样就解决了,不再报错。
本文参考:https://blog.csdn.net/chongtong/article/details/80831782
后续:(划重点)
如果你使用的是windows系统,还需要安装pypiwin32
模块
pip install pypiwin32
不然会有No Module name win32con
的报错
如果使用的是Mac
或者Linux
, 则无视本重点。
完