业务需求给每个 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
docker 挂载代码如下:
volumes:
- /var/log/flask_log:/src/flask_log:rw # docker 里面的 WORKDIR 为 /src
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.