logging模块(日志配置)

ATM购物车项目配置日志及使用示例

日志配置及使用,参考代码基本可以直接使用,如有不同需求适当修改即可

  1. 在 settings.py 中配置

    import os
    
    # 得到程序根目录
    BASE_PATH = os.path.dirname(os.path.dirname(__file__))
    # 拼接存放用户数据的文件夹路径
    USER_DATA_PATH = os.path.join(BASE_PATH, 'db', 'user_data')
    
    """
    logging 配置
    """
    # 定义三种日志的输出格式
    standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \
                      '[%(levelname)s][%(message)s]'
    
    simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s'
    
    test_format = '%(asctime)s] %(message)s'
    
    # ******************注意1:log文件的目录
    BASE_PATH = os.path.dirname(os.path.dirname(__file__))
    logfile_dir = os.path.join(BASE_PATH, 'log')
    
    # ******************注意2:log文件名
    logfile_name = 'atm.log'
    
    # 如果不存在定义的日志目录就创建一个
    if not os.path.isdir(logfile_dir):
        os.mkdir(logfile_dir)
    
    # log文件的全路径
    logfile_path = os.path.join(logfile_dir, logfile_name)
    
    # 日志配置字典
    LOGGING_DIC = {
        # 配置字典的版本
        'version': 1,
        'disable_existing_loggers': False,
        # 设置多种日志的格式
        'formatters': {
            'standard': {
                'format': standard_format
            },
            'simple': {
                'format': simple_format
            },
            'test': {
                'format': test_format
            },
        },
        'filters': {},
        # handlers 是日志的接收者,不同的 handler 会将日志输出到不同的位置
        'handlers': {
            # 打印到终端的日志
            'console': {
                'level': 'DEBUG',
                'class': 'logging.StreamHandler',  # 打印到屏幕
                'formatter': 'simple'
            },
            # 打印到文件的日志,有轮转功能
            'default': {
                'level': 'DEBUG',
                'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,日志轮转
                'maxBytes': 1024 * 1024 * 5,  # 日志大小 5M 超过此大小,将文件重命名为其他文件,继续在新的 a1.log 内写入
                'backupCount': 5,  # 重命名日志的份数,表示最多重命名几次。日志需要保存时间越长,份数应该越高
                'filename': logfile_path,  # os.path.join(os.path.dirname(os.path.dirname(__file__)), 'log', 'a2.log)
                'encoding': 'utf-8',
                'formatter': 'standard',
            },
        },
        # loggers 是日志的产生者,产生的日志会传递给 handler 然后控制输出
        'loggers': {
            # logging.getLogger(__name__)拿到的logger配置
            # 大部分日志名不同但需放在同一日志文件内的,可以将日志名留空
            '': {
                'handlers': ['default'],
                'level': 'DEBUG',
                'propagate': False
            }
        }
    }
    
  2. 在 lib 文件夹内的 common.py 中添加日志功能,以便在接口层使用

    import logging.config
    from conf import settings
    
    
    def get_logger(log_type):  # log_type 可以是 user日志、bank日志、购物商城日志
        # 1、加载日志配置信息
        logging.config.dictConfig(settings.LOGGING_DIC)
        # 2、获取日志对象
        logger = logging.getLogger(log_type)
        # 返回日志对象
        return logger
    
  3. 在接口层使用

    # 如 user_interface.py 中
    from lib import common
    
    
    # 根据不同功能接口创建不同日志对象
    user_logger = common.get_logger('user')
    
    
    # 在函数内合适位置记录日志
    msg = f'用户「{username}」 登录成功!'
    user_logger.info(msg)
    
上一篇:Vue3打包放到SpringBoot项目中部署到服务器


下一篇:flask带日志的微服务封装