Python logging日志模块
logging模块是 Python 标准日志库,支持分级日志、格式化和多种输出。
基本使用
Python
import logging
# 配置基本日志
logging.basicConfig(level=logging.DEBUG)
logging.debug("调试信息")
logging.info("普通信息")
logging.warning("警告信息")
logging.error("错误信息")
logging.critical("严重错误")
日志级别
| 级别 | 数值 | 用途 |
|---|---|---|
| DEBUG | 10 | 调试详情 |
| INFO | 20 | 普通信息 |
| WARNING | 30 | 警告 |
| ERROR | 40 | 错误 |
| CRITICAL | 50 | 严重错误 |
配置日志格式
Python
import logging
logging.basicConfig(
level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S'
)
logging.info("格式化日志输出")
# 输出: 2024-05-19 10:30:00 - root - INFO - 格式化日志输出
输出到文件
Python
import logging
logging.basicConfig(
level=logging.INFO,
filename='app.log',
filemode='a', # 追加模式
format='%(asctime)s - %(levelname)s - %(message)s'
)
logging.info("日志写入文件")
创建Logger对象
Python
import logging
# 创建自定义 Logger
logger = logging.getLogger('my_app')
logger.setLevel(logging.DEBUG)
# 创建处理器
console_handler = logging.StreamHandler()
file_handler = logging.FileHandler('app.log')
# 设置处理器级别
console_handler.setLevel(logging.INFO)
file_handler.setLevel(logging.DEBUG)
# 创建格式器
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)
# 添加处理器
logger.addHandler(console_handler)
logger.addHandler(file_handler)
logger.debug("调试信息(仅文件)")
logger.info("普通信息(文件和控制台)")
格式化字段
| 字段 | 说明 |
|---|---|
| %(asctime)s | 时间戳 |
| %(name)s | Logger名称 |
| %(levelname)s | 日志级别 |
| %(message)s | 日志消息 |
| %(filename)s | 文件名 |
| %(lineno)d | 行号 |
| %(funcName)s | 函数名 |
日志异常信息
Python
import logging
try:
result = 1 / 0
except Exception as e:
# exc_info=True 记录异常堆栈
logging.error("发生异常", exc_info=True)
# 或使用 exception 方法
logging.exception("发生异常") # 自动包含堆栈
配置字典方式
Python
import logging
import logging.config
LOGGING_CONFIG = {
'version': 1,
'formatters': {
'default': {
'format': '%(asctime)s - %(levelname)s - %(message)s'
}
},
'handlers': {
'console': {
'class': 'logging.StreamHandler',
'formatter': 'default',
'level': 'INFO'
},
'file': {
'class': 'logging.FileHandler',
'filename': 'app.log',
'formatter': 'default',
'level': 'DEBUG'
}
},
'loggers': {
'my_app': {
'handlers': ['console', 'file'],
'level': 'DEBUG',
'propagate': False
}
}
}
logging.config.dictConfig(LOGGING_CONFIG)
logger = logging.getLogger('my_app')
logger.info("字典配置日志")
propagate 日志传播
Python
import logging
# 子 Logger 日志传播到父 Logger
logger = logging.getLogger('my_app.module')
logger.info("日志传播到父 Logger")
# 设置 propagate=False 禁止传播
logger.propagate = False
要点总结
basicConfig()快速配置基本日志- 五个日志级别:DEBUG、INFO、WARNING、ERROR、CRITICAL
- Logger、Handler、Formatter 组成日志系统
getLogger(name)创建命名 LoggerStreamHandler控制台输出,FileHandler文件输出logging.exception()自动记录异常堆栈dictConfig()支持字典配置- propagate 控制日志向父 Logger 传播
📝 发现内容有误?点击此处直接编辑