示例代码
from flask import Flask, request
import logging
app = Flask(__name__)
app.config['PROPAGATE_EXCEPTIONS'] = False
class RequestFormatter(logging.Formatter):
def format(self, record):
'''每次生产日志时都会调用,用于生成自定义的日志信息'''
try:
record.url = request.url
record.remote_addr = request.remote_addr
except:
record.url = 'null'
record.remote_addr = 'null'
finally:
return super().format(record)
def create_logger():
flask_app_logger = logging.getLogger('flask.app')
flask_app_logger.setLevel('DEBUG')
console_log_handler = logging.StreamHandler()
console_log_formatter = logging.Formatter(fmt='%(name)s %(levelname)s %(pathname)s %(lineno)d %(message)s')
console_log_handler.setFormatter(console_log_formatter)
flask_app_logger.addHandler(console_log_handler)
from logging.handlers import RotatingFileHandler
file_log_handler = RotatingFileHandler(filename='flask.log', maxBytes=100 * 1024 * 1024, backupCount=10)
file_log_formatter = RequestFormatter(fmt='[%(asctime)s] %(name)s %(levelname)s %(remote_addr)s requested %(url)s %(pathname)s %(lineno)d %(message)s')
file_log_handler.setFormatter(file_log_formatter)
file_log_handler.setLevel('ERROR')
flask_app_logger.addHandler(file_log_handler)
@app.route('/')
def index():
app.logger.error("this is a error log")
return 'index'
if __name__ == '__main__':
create_logger()
app.run(debug=True, host='0.0.0.0', port=8000)