业务需求给每个 api 上了一个 log 装饰器记录日志,写入到 flask_log/app.log ,代码如下:
log_path = os.path.join(os.path.dirname(os.getcwd()), "flask_log") #没有 flask_log 文件就生成一个
if not os.path.exists(log_path):
os.mkdir(log_path)
logging.basicConfig(level=logging.INFO)
#写入到 app.log 文件
handler = logging.handlers.RotatingFileHandler(os.path.join(log_path, "app.log"),
'a', maxBytes=1024 * 1024 * 200, backupCount=max_log_count,
encoding="UTF-8")
# 定制日志格式
logging_format = logging.Formatter('pid:%(process)d - %(asctime)s - %(levelname)s '
'- %(filename)s:%(funcName)s[line:%(lineno)d] - %(message)s')
handler.setFormatter(logging_format)
# api 装饰器
def log(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
try:
response = func(*args, **kwargs)
except Exception as e:
current_app.logger.error(make_log_message(request, str(e)))
return "Sorry, some error happened. Info:\n{}".format(e), 500
current_app.logger.info(make_log_message(request, response)
return response
return wrapper
在本机上测试没有问题,每次访问都会记录到 flask_log/app.log 中
但是用 docker 部署之后就会出现问题: 控制台日志输出正常, app.log 也会正常创建。
但是 app.log 一直为空不记录任何信息!
docker 挂载代码如下:
volumes:
- /var/log/flask_log:/src/flask_log:rw # docker 里面的 WORKDIR 为 /src