Flask 定制日志并输出到文件
定制日志器
flask缺省日志器配置
flask自带的日志系统,缺省配置dictConfig(),但必须在Flask()应用之前使用
# flask缺省配置
from logging.config import dictConfig
dictConfig({
'version': 1,
'formatters': {'default': {
'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s',
}},
'handlers': {'wsgi': {
'class': 'logging.StreamHandler',
'stream': 'ext://flask.logging.wsgi_errors_stream',
'formatter': 'default'
}},
'root': {
'level': 'INFO',
'handlers': ['wsgi']
}
})
app = Flask(__name__)
自定义日志器
# 配置
def logger_setting(base_dir=None):
# base_dir是日志文件存放的根目录,这里为项目目录
if not base_dir:
base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))
format_dic, handler_dic, logger_dic = dict(), dict(), dict()
# 定义日志格式
format_dic['default'] = {'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s'}
format_dic['simple'] = {'format': '{asctime}- {levelname} {message}'}
format_dic['standard'] = {'format': '%(asctime)s [%(module)s:%(funcName)s] [%(levelname)s]- %(message)s'}
# 定义日志处理器
handler_dic['wsgi'] = {'class': 'logging.StreamHandler', # 流输出
'stream': 'ext://flask.logging.wsgi_errors_stream',
'formatter': 'default'}
handler_dic['console'] = {'level': 'INFO',
#'class': 'logging.StreamHandler',
'class': 'logging.FileHandler', # 输出到文件
'filename': os.path.join(base_dir, 'logs','console.log',
'formatter': 'simple'}
handler_dic['error'] = {'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(base_dir, 'logs', 'error.log'), # 日志文件全路径 = base_dir/logs/error.log
'maxBytes': 1024 * 1024 * 5,
'formatter': 'standard'}
handler_dic['master'] = {'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(base_dir, 'logs', 'master.log'),
'maxBytes': 1024 * 1024 * 5,
'formatter': 'standard'}
# 定义日志器
logger_dic['master'] = {'handlers': ['master'],
'level': 'INFO',
'propagate': True}
config = {
'version': 1,
'formatters': format_dic,
'handlers': handler_dic,
# 'root': {'level': 'INFO', 'handlers': ['wsgi']}, #这个可以不用
'loggers': logger_dic
}
return config
# flask使用自定义日志器配置, 这里使用是重新定义缺省日志器配置
dictConfig(logger_setting())
app = Flask(__name__, template_folder='templates', static_folder='static')
logger = logging.getLogger('master')
@app.get('/')
def login():
try:
print('测试日志器')
raise ValueError('djjsdwewoeoopw')
except Exception as e:
logger.error(e)
traceback.print_exc()
abort(401)
if __name__ == '__main__':
app.run()
同时在项目目录下创建logs目录如下图