import logging
import os
from logging.handlers import TimedRotatingFileHandler
from flask import Flask
from confs.config import config_map
def setup_log(config_name):
dir_name = 'logs'
if not os.path.isdir(dir_name):
os.makedirs(dir_name)
# 创建自定义日志记录器
logger = logging.getLogger(__name__)
logger.setLevel(config_map[config_name].LOG_LEVEL)
# 创建日志格式
formatter = logging.Formatter(
"[%(levelname)s] [%(asctime)s] [%(process)s:%(thread)s] - %(filename)s[line:%(lineno)d]: %(message)s"
)
# 配置文件日志处理程序
file_log_handler = TimedRotatingFileHandler("logs/info.log", when='D', interval=1, backupCount=14, delay=True)
file_log_handler.setFormatter(formatter)
logger.addHandler(file_log_handler)
# 配置错误日志文件
err_handler = TimedRotatingFileHandler("logs/error.log", when='D', interval=1, backupCount=14, delay=True)
err_handler.setFormatter(formatter)
err_handler.setLevel(logging.ERROR)
logger.addHandler(err_handler)
# 添加控制台handler
chlr = logging.StreamHandler()
chlr.setFormatter(formatter)
logger.addHandler(chlr)
return logger
def create_app(config_name):
# 配置日志
logger = setup_log(config_name)
# 创建 Flask 应用
app = Flask(__name__)
# 配置 Flask 使用自定义的日志记录器
app.logger = logger
return app
蓝图中使用方式
from flask import Blueprint, current_app
blueprint = Blueprint('some_blueprint', __name__)
@blueprint.route('/some_route')
def some_route():
current_app.logger.info("访问了某个路由")
return "Some response"
在应用外部使用
如果您需要在 Flask 应用的外部(如一些独立的模块或服务中)使用日志记录器,您可以直接从模块中获取日志记录
import logging
logger = logging.getLogger(__name__)
def some_function():
logger.info("执行了某个功能")
config配置
# -*- coding: utf-8 -*-
import os
import logging
from urllib import parse
class Config(object):
SECRET_KEY = "sjljajs@ljj;k;fads"
# 数据库配置
USERNAME = os.getenv('USERNAME')
PASSWORD = os.getenv('PASSWORD')
HOSTNAME = os.getenv('HOSTNAME')
PORT = os.getenv('PORT')
DATABASE = os.getenv('DATABASE')
# sftp配置
SFTP_HOST = os.getenv('SFTP_HOST')
SFTP_PORT = os.getenv('SFTP_PORT')
SFTP_NAME = os.getenv('SFTP_NAME')
SFTP_PASWD = os.getenv('SFTP_PASWD')
REMOTE_DIR = "/file/yunjs_sftp"
# 设置日志等级
LOG_LEVEL = logging.INFO
class DevelopmentConfig(Config):
"""开发环境下的配置"""
USERNAME = "mobile"
PASSWORD = "mobile"
HOSTNAME = "192.168.1.145"
PORT = 3306
DATABASE = "mobile"
SFTP_HOST = "120.197.235.112"
SFTP_PORT = 6606
SFTP_NAME = "cloud_sftp"
SFTP_PASWD = "slj#$FW34G#!fsG"
REMOTE_DIR = "/file/yunjs_sftp"
class ProductionConfig(Config):
"""生产环境下的配置"""
LOG_LEVEL = logging.INFO
class TestingConfig(Config):
"""单元测试环境下的配置"""
DEBUG = True
TESTING = True
config_map = {
"dev": DevelopmentConfig,
"pro": ProductionConfig,
"test": TestingConfig
}
# ENV = "dev" 、"pro" 、"test"
# ENV = os.getenv('ENV')
# SERVER_PORT = os.getenv('SERVER_PORT')
ENV = 'dev'
LOG_LEVEL = "info"