Flask 新增日志记录

项目中有用到 Flask 写的部分接口,但是最近一直不是太稳定,所以想到记录运行、请求日志。对服务进行监测。

代码

代码部分比较简单,因为官方文档有日志这块的说明,可以直接使用 logging 进行输出日志。

具体代码:

from flask import Flask
import logging
from time import strftime,localtime,time
import os

# 创建日志文件夹
def make_dir(dir_path):
    temp_path = dir_path.strip()
    if not os.path.exists(temp_path):
        os.makedirs(temp_path)
    return temp_path

# 在创建 app 前将 log 级别设置为 debug
logging.basicConfig(level=logging.DEBUG)
app = Flask(__name__, static_url_path='/')
log_dir_path = 'logs'
log_file_name = 'logger-' + time.strftime('%Y-%m-%d',time.localtime(time.time())) + '.log'
log_file_folder = os.path.abspath(os.path.join(os.path.dirname(__file__),os.pardir,os.pardir)) + os.sep + log_dir_path
make_dir(log_file_folder)
log_file_str = log_file_folder + os.sep + log_file_name

# 设置日志字符集和存储路径
file_log_fandler = logging.FileHandler(log_file_str,encoding='UTF-8')
# file_log_fandler = RotatingFileHandler('logs/log',maxBytes=1024*1024*10,backupCount=100)
# 设置日志格式
logging_format = logging.Formatter('%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s')
file_log_fandler.setFormatter(logging_format)
app.logger.addHandler(file_log_fandler)
app.logger.info(log_file_folder)

@app.route("/")
def index():
    app.logger.info('info log')
    app.logger.warning('warning log')

    return 'Hello World!'


if __name__ == '__main__':
    app.run()

注意

1、time 下的函数报错:AttributeError: 'builtin_function_or_method' object has no attribute 'strftime'

  这里需要将 

import time
# 换成
from time import strftime

2、日志 addHandler 的位置

  开始是把这一部分放在了 __name__ ==  '__man__' 下面,直接运行Python文件可以,但是使用 flask run 没有效果。

  所以这里要注意:flask run 运行时不会执行 __name == '__main__' 下的代码。

  最后,直接把 addHandler 放在 Flask 初始化后面

3、nohup 日志和 logger 对比

  项目中是直接使用 falsk 命令行运行,不是通过 ngixn,所以用了 nohup

  nohup 会记录对应输入信息,这里用 logger 记录只是为了自己需要的进行单独输出,便于监测

参考

官方日志

Flask 使用日志

Flask 日志配置

posted @ 2022-03-01 10:47  漠里  阅读(637)  评论(0编辑  收藏  举报