自学内容网 自学内容网

Python_logging模块,备忘

日志基础使用

日志级别

import logging

logging.debug('调试日志')
logging.info('消息日志')
logging.warning('警告日志')
logging.error('错误日志')
logging.critical('严重错误日志')

日志基本配置

import logging

# 日志基本配置
logging.basicConfig(
    # 1、日志级别
    level=30,
    # DEBUG:10
    # INFO:20
    # WARNING:30
    # ERROR:40
    # CRITICAL:50
    # 2、日志输出格式 asctime:当前时间,name:当前日志名字,pathname:产生日志对应的文件名字,lineno:产生日志对应的代码行,levelname:日志等级,message:日志具体内容
    format='%(asctime)s %(name)s [%(pathname)s line:%(lineno)d] %(levelname)s %(message)s',
    # 3、自定义asctime的时间格式
    datefmt='%Y-%m-%d %H:%M:%S',
    # 4、日志输出位置:终端/文件
    filename='user.log', # 不指定此配置,默认打印到终端
)
'''
%(name)s Logger的名字(getlogger时指定的名字)
%(levelno)s 数字形式的日志级别
%(levelname)s 文本形式的日志级别
%(pathname)s 调用日志输出日志的完整路径名
%(filename)s 调用日志输出日志的文件名
%(module)s 调用日志输出日志的模块名
%(funcName)s 调用日志输出日志的函数名
%(lineno)d 调用日志输出函数的语句所在的代码行
%(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示
%(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数
%(asctime)s 字符串形式的当前时间,默认格式是 “2022-07-30 22:15:53,394”
%(thread)d 线程ID,可能没有
%(threadName)s 线程名,可能没有
%(process)d 进程ID,可能没有
%(message)s 用户输出的消息
'''

使用日志配置字典

LOGGING_DIC

  • 一般在项目中conf/settings.py配置日志字典LOGGING_DIC,其中,formatters,handlers,loggers配置项最重要。
# 日志配置字典
LOGGING_DIC = {
    # 自定义版本号
    'version': 1.0,
    # 涉及存在的logger二次载入,Do not get logger at the module level unless disable_existing_loggers is False
    'disable_existing_loggers': False,
    # 过滤器,忽略
    'filters': {},
    # 日志格式
    'formatters': {
        'standard': {
            'format': '%(asctime)s %(threadName)s:%(thread)d [%(name)s] %(levelname)s [%(pathname)s:%(lineno)d] %(message)s',
            'datefmt': '%Y-%m-%d %H:%M:%S',
        },
        'simple': {
            'format': '%(asctime)s [%(name)s] %(levelname)s %(message)s',
            'datefmt': '%Y-%m-%d %H:%M:%S',
        },
        'test': {
            'format': '%(asctime)s %(message)s',
        },
    },
    # 日志处理器
    'handlers': {
        'console_debug_handler': {
            'level': 'DEBUG',  # 日志处理的级别限制
            'class': 'logging.StreamHandler',  # 输出到终端
            'formatter': 'simple'  # 日志格式
        },
        'file_info_handler': {
            'level': 'INFO',
            'class': 'logging.handlers.RotatingFileHandler',  # 保存到文件,日志轮转
            'filename': 'user.log',
            'maxBytes': 1024 * 1024 * 10,  # 日志大小 10M
            'backupCount': 10,  # 日志文件保存数量限制
            'encoding': 'utf-8',
            'formatter': 'standard',
        },
        'file_debug_handler': {
            'level': 'DEBUG',
            'class': 'logging.FileHandler',  # 保存到文件
            'filename': 'test.log',  # 日志存放的路径
            'encoding': 'utf-8',  # 日志文件的编码
            'formatter': 'test',
        },
    },
    # 日志记录器
    'loggers': {
        '登录日志': {  # 导入时logging.getLogger时使用的app_name
            'handlers': ['console_debug_handler'],  # 日志分配到哪个handlers中
            'level': 'DEBUG',  # 日志记录的级别限制
            'propagate': False,  # 默认为True,向上(更高级别的logger)传递,设置为False即可,否则会一份日志向上层层传递
        },
        '注册日志': {
            'handlers': ['console_debug_handler', 'file_debug_handler'],
            'level': 'INFO',
            'propagate': False,
        },
    }
}

日志使用

  • 使用logging.config.dictConfig()传入LOGGING_DIC字典
  • 生成需要的日志对象,进行记录
import logging.config
from conf.settings import LOGGING_DIC


logging.config.dictConfig(LOGGING_DIC)
logger1 = logging.getLogger('登录日志')
logger1.info('xxx登录了')
logger2 = logging.getLogger('注册日志')
logger2.info('xxx注册了')

原文地址:https://blog.csdn.net/qq_42831466/article/details/136136830

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!