一、日志模块
import logging
logging.debug("调试日志")
logging.info('消息日志')   
logging.warning("告警日志")
logging.error('错误日志')
logging.critical('严重错误日志')
 
debug(调试)级别用于输出调试信息,这些信息主要用于开发和调试过程,通常不会在生产环境中使用。
 info(消息)级别用于输出正常的日志消息,用于提供应用程序的运行状态信息。
 warning(告警)级别用于输出警告信息,表示可能会出现潜在的问题或异常情况,但不会影响应用程序的正常运行
 error(错误)级别用于输出错误信息,表示出现了一些错误,但不会导致应用程序终止
 critical(严重错误)级别用于输出严重错误信息,表示出现了致命错误,可能导致应用程序无法继续运行
二、basicConfig
import logging
logging.basicConfig(
    filename='app.log',   # 日志文件名 不指定文件,默认打印到终端控制台
    filemode='w',         # 文件模式
    format='%(asctime)s - %(name)s - %(pathname)s - %(lineno)d - %(levelname)s - %(message)s',
,  # 日志格式
    datefmt='%d-%b-%y %H:%M:%S',  # 时间格式 format中asctime
    level=logging.DEBUG  # 日志级别
)
logging.debug("调试日志")
logging.info('消息日志')    # 正常日志
logging.warning("告警日志")
logging.error('错误日志')
logging.critical('严重错误日志')
 
日志格式:
| 日志字段 | 示例值 | 描述 | 
|---|---|---|
| asctime | 2023-05-19 15:30:45 | 日志事件发生的时间 | 
| name | my_logger | 记录日志事件的 logger 的名称 | 
| pathname | /path/to/my_file.py | 产生日志的文件路径 | 
| lineno | 42 | 产生日志的文件行数 | 
| levelname | ERROR | 日志等级 | 
| message | This is an error message | 日志内容 | 
文件模式:filemode
| 模式 | 描述 | 
|---|---|
| ‘r’ | 只读模式,文件必须存在。 | 
| ‘w’ | 写入模式,若文件存在则清空内容,若文件不存在则创建新文件。 | 
| ‘x’ | 独占创建模式,仅能用于创建新文件,若文件已存在则引发错误。 | 
| ‘a’ | 追加模式,若文件存在则将内容追加到末尾,若文件不存在则创建新文件。 | 
三、日志记录器
在Python的 logging 模块中,我们可以使用字典来进行配置,这比使用 basicConfig() 函数更加灵活。字典配置可以让你更详细地控制日志记录器、处理器、过滤器和格式化器;
 可以定义多个日志记录器(logger),并且为每个记录器配置不同的处理器(handler),每个记录器可以独立地设置它的日志级别和处理器
 formatters 日志格式化器
 filters 日志过滤器
 handlers 日志处理器
 loggers 日志记录器
formatters 日志格式化器
 filters 日志过滤器
 loggers、handlers 均配置日志级别,会对其二次筛选
定义了两个日志记录器:console_logger 和 file_logger。console_logger 记录器只将日志消息发送到控制台,file_logger 记录器只将日志消息发送到文件。
import logging
import logging.config
LOGGING_CONFIG = {
    'version': 1,  # 必填。这是配置字典的版本,必须为1。
    'disable_existing_loggers': False,  # 可选。默认为True,表示禁用所有已存在的日志记录器。设置为False允许已存在的记录器继续运行。
    'formatters': {  # 日志格式化器:
        'standard': {  # 标准格式器 名字可随意改,可随意添加
            'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s',
            'datefmt': '%d-%b-%y %H:%M:%S'
        },
        'detailed': {  # 更详细的格式器
            'format': '%(asctime)s [%(levelname)s] %(name)s %(pathname)s %(lineno)d: %(message)s',
            'datefmt': '%d-%b-%y %H:%M:%S'
        },
    },
    'filters': {},  # 日志过滤器:默认即可
    'handlers': {  # 日志处理器: 此处定义了两种不同的处理器,可自定义
        'console': {  # 控制台处理器
            'class': 'logging.StreamHandler',  # 使用的处理器类
            'formatter': 'standard',  # 使用的格式器
            'level': 'DEBUG',  # 处理器的日志级别
        },
        'file': {  # 文件处理器
            'class': 'logging.FileHandler',  # 使用的处理器类
            'filename': 'app.log',  # 日志文件名
            'formatter': 'detailed',  # 使用的格式器
            'level': 'DEBUG',  # 处理器的日志级别
        },
        'file2': {  # 文件处理器
            'class': 'logging.FileHandler',  # 使用的处理器类
            'filename': 'app2.log',  # 日志文件名
            'formatter': 'detailed',  # 使用的格式器
            'level': 'DEBUG',  # 处理器的日志级别
        },
        'file3': {
            'class': 'logging.handlers.RotatingFileHandler',  # 使用RotatingFileHandler
            'filename': 'app3.log',  # 日志文件名
            'maxBytes': 1024*1024*30,  # 日志文件的最大字节数
            'backupCount': 14,  # 备份文件的数量
            'formatter': 'standard',  # 使用的格式器
            'level': 'DEBUG',  # 处理器的日志级别
        },
    },
	'loggers': {  # 日志记录器
        'console_logger': {  # 只将日志消息发送到控制台
            'handlers': ['console'],  # 使用的处理器
            'level': 'DEBUG',  # 记录器的日志级别
            'propagate': False, # 默认True (向更高级别logger传递)
        },
        'file_logger': {  # 只将日志消息发送到文件
            'handlers': ['console', 'file'],  # 使用的处理器及输入终端也卸乳文件
            'level': 'INFO',  # 记录器的日志级别
        },
        '': {  # 只将日志消息发送到文件
            'handlers': ['console', 'file2'],  # 使用的处理器及输入终端也卸乳文件
            'level': 'INFO',  # 记录器的日志级别
        },
    },
}
logging.config.dictConfig(LOGGING_CONFIG)
# 使用记录器记录日志
console_logger = logging.getLogger('console_logger')
console_logger.debug("调试日志")
console_logger.info('消息日志')    # 正常日志
console_logger.warning("告警日志")
console_logger.error('错误日志')
console_logger.critical('严重错误日志')
file_logger = logging.getLogger('file_logger')
file_logger.debug("调试日志")
file_logger.info('消息日志')    # 正常日志
file_logger.warning("告警日志")
file_logger.error('错误日志')
file_logger.critical('严重错误日志')
# 如果用户登录、用户订单 没有配置对应的logger,
找不到会默认找没有名字的'' logger
file_logger = logging.getLogger('login')
file_logger.info("用户登录")
file_logger = logging.getLogger('order')
file_logger.info("用户订单")
 


















![[RapidOCRWeb] 桌面版使用教程](https://img-blog.csdnimg.cn/img_convert/458a1e5c99d7bf05fc4252fba84a069d.png)

