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目录如下图
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值