falsk本身有一个logging的模块,并且有一个create_logger函数,并且有一个default_handler的默认handler。
from flask import has_request_context, requestfrom flask.logging import default_handlerclass RequestFormatter(logging.Formatter):def format(self, record):if has_request_context():record.url = request.urlrecord.remote_addr = request.remote_addrelse:record.url = Nonerecord.remote_addr = Nonereturn super().format(record)formatter = RequestFormatter('[%(asctime)s] %(remote_addr)s requested %(url)s\n''%(levelname)s in %(module)s: %(message)s')default_handler.setFormatter(formatter)
import loggingimport osimport datetimefrom flask import Flaskfrom flask.logging import default_handlerfrom flask_sqlalchemy import SQLAlchemyfrom flask_cors import CORSfrom dev_setting import Configclass LogConfig:from logging.handlers import TimedRotatingFileHandlerlog_path = os.path.join(os.path.dirname(__file__), 'log')my_handler = logging.handlers.TimedRotatingFileHandler(os.path.join(log_path, f'{str(datetime.date.today())}_all.log'), when='midnight', interval=1, backupCount=7,atTime=datetime.time(0, 0, 0, 0))my_handler.setFormatter(logging.Formatter('%(asctime)s\t%(levelname)s\t%(funcName)s\t%(message)s'))# 配置一个记录错误信息的handler,精确到了文件的行f_handler = logging.FileHandler(os.path.join(log_path, 'error.log'))f_handler.setLevel(logging.ERROR)f_handler.setFormatter \(logging.Formatter('%(asctime)s\t%(levelname)s\t%(filename)s\t[: %(lineno)d]\t%(funcName)s\t%(message)s'))def create_flask_app(config):app = Flask(__name__)app.config.from_object(config)return appapp = create_flask_app(Config)app.logger.setLevel(logging.DEBUG)# 默认的Handler是flask.logging.StreamHandler(wsgi_errors_stream),没有落到文件中,给他干掉app.logger.removeHandler(default_handler)my_handler = LogConfig.my_handlerf_handler = LogConfig.f_handler# 把上面的自己的两个handler装到logger上app.logger.addHandler(my_handler)app.logger.addHandler(f_handler)CORS(app)db = SQLAlchemy(app)
后面的自己的程序的日志,都用这个来搞
https://blog.csdn.net/weixin_30553837/article/details/102140509
