1. 程式人生 > 其它 >flask日誌設定

flask日誌設定

技術標籤:Flaskflasklogging

在App/utils/ 新建loggings.py檔案

from flask import request
import logging
import logging.handlers
import os


class RequestFormatter(logging.Formatter):
    """
    針對請求資訊的日誌格式
    """
    def format(self, record):
        record.url = request.url
        record.remote_addr = request.remote_addr
        return super().format(record)


def create_logger(app):
    """
    設定日誌
    :param app: Flask app物件
    :return:
    """
    logging_file_dir = app.config['LOGGING_FILE_DIR']
    logging_file_max_bytes = app.config['LOGGING_FILE_MAX_BYTES']
    logging_file_backup = app.config['LOGGING_FILE_BACKUP']
    logging_level = app.config['LOGGING_LEVEL']

    flask_console_handler = logging.StreamHandler()
    flask_console_handler.setFormatter(logging.Formatter('%(levelname)s %(module)s %(lineno)d %(message)s'))

    request_formatter = RequestFormatter('%(levelname)s [%(asctime)s] %(remote_addr)s -> %(url)s '
                                         '%(module)s %(lineno)d: %(message)s')

    cida_formatter = RequestFormatter('%(levelname)s [%(asctime)s]  %(module)s %(lineno)d: %(message)s')

    flask_file_handler = logging.handlers.RotatingFileHandler(
        filename=os.path.join(logging_file_dir, 'flask.log'),
        maxBytes=logging_file_max_bytes,
        backupCount=logging_file_backup
    )
    flask_file_handler.setFormatter(request_formatter)

    log_flask_app = logging.getLogger('flask.app')
    log_flask_app.addHandler(flask_file_handler)
    log_flask_app.setLevel(logging_level)

    cida_file_handler = logging.handlers.RotatingFileHandler(
        filename=os.path.join(logging_file_dir, 'xxx_action.log'),
        maxBytes=logging_file_max_bytes,
        backupCount=logging_file_backup
    )

    cida_file_handler.setFormatter(cida_formatter)
    log_flask_cida = logging.getLogger('xxx.app')
    log_flask_cida.addHandler(cida_file_handler)
    log_flask_cida.setLevel(logging_level)

    if app.debug:
        log_flask_app.addHandler(flask_console_handler)

在App/__init__.py 的create_app 中新增配置

def create_app(env):
    # 建立Flask的app物件
    app = Flask(__name__)

    ... ...

    # 配置日誌
    from .utils.loggings import create_logger
    create_logger(app)

在App/settings.py中新增相關配置

# 日誌
    LOGGING_LEVEL = 'DEBUG'
    LOGGING_FILE_DIR = './logs'
    LOGGING_FILE_MAX_BYTES = 300 * 1024 * 1024
    LOGGING_FILE_BACKUP = 10

如何在flask中使用???

在view頁面,匯入,使用

from flask import Blueprint
import logging
logger = logging.getLogger('xxx.app')

blue = Blueprint('blue', __name__)


def init_views(app):
    app.register_blueprint(blue)


@blue.route('/')
def index():
    logger.error('Error')
    logger.warning('Warning')
    logger.info("Info")
    return "Index"

日誌如下: