log.py 1.57 KB
Newer Older
chenyuanjie committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
import os
import logging
from logging import handlers
from werkzeug.exceptions import InternalServerError

basedir = os.path.abspath(os.path.dirname(__file__))


def handle_error(error):
    Log.logger().error(error)
    return error


class Log:
    LOG_PATH = os.path.join(basedir, 'logs')
    LOG_NAME = os.path.join(LOG_PATH, 'log.txt')
    # LOG_LEVEL = 'INFO'
    LOG_LEVEL = 'ERROR'

    current_app = None

    @staticmethod
    def init_app(app):
        Log.current_app = app
        if not os.path.exists(Log.LOG_PATH):
            os.makedirs(Log.LOG_PATH)

        # 根据时间重命名log
        file_handler = logging.handlers.TimedRotatingFileHandler(Log.LOG_NAME, when='D', interval=1, backupCount=0,
                                                                 encoding='utf-8')
        file_handler.suffix = '%Y-%m-%d.log'
        # 单独设置handler的日志级别:低于该级别则该handler不处理(一个logger可以有多个handler)
        # file_handler用来写入文件
        file_handler.setLevel(Log.LOG_LEVEL)

        fmt = '%(asctime)s-%(levelname)s-%(filename)s-%(funcName)s-%(lineno)s: %(message)s'
        formatter = logging.Formatter(fmt)
        file_handler.setFormatter(formatter)

        # 设置logger的日志级别:大于等于该级别才会交给handler处理
        app.logger.setLevel('DEBUG')
        app.logger.addHandler(file_handler)

        # DEBUG模式下不会走到handle_error
        app.register_error_handler(InternalServerError, handle_error)

    @staticmethod
    def logger():
        return Log.current_app.logger