python 笔记&logging
import logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logging.FileHandler('del_dir_all.log', encoding='utf-8'),
logging.StreamHandler()
]
)
logging.basicConfig() 是 Python 日志模块的「快速配置函数」,用于设置日志系统的默认行为。如果不调用该函数,日志会使用默认配置(只输出 WARNING 及以上级别,打印到控制台,格式简单)。
level
作用:设置日志的「输出级别阈值」—— 只有级别 大于等于 该阈值的日志,才会被记录 / 打印。
日志级别(从低到高):
| 级别常量 | 数值 | 说明 |
| logging.DEBUG | 10 | 调试信息(开发时用) |
| logging.INFO | 20 | 普通信息(正常运行状态) |
| logging.WARNING | 30 | 警告信息(潜在问题) |
| logging.ERROR | 40 | 错误信息(功能异常) |
| logging.CRITICAL | 50 | 严重错误(程序崩溃) |
当前配置效果:只输出 INFO、WARNING、ERROR、CRITICAL 级别的日志,DEBUG 级别的日志会被过滤掉(不输出)。
format
作用:定义日志的「输出格式」,通过占位符(%(xxx)s)指定日志中包含的字段。
常用占位符说明:
| 占位符 | 含义 |
|---|---|
%(asctime)s |
日志记录的时间(可读格式) |
%(levelname)s |
日志级别名称(如 INFO/ERROR) |
%(message)s |
日志的具体内容(用户自定义信息) |
格式效果示例:
-
2025-11-26 14:30:00,123 - INFO - 删除过期文件: /data/logs/20250101.log (大小: 1024字节) 2025-11-26 14:30:01,456 - ERROR - 处理路径 /data/cache/old 时出错: 权限不足
handlers=[...]
总述
补充说明
以上注释来自于豆包摘录
import logging
from logging.handlers import RotatingFileHandler
import os
def setup_logger():
# 1. 创建日志器(避免重复添加处理器)
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO) # 全局日志级别(低于此级别的日志不会被处理)
logger.propagate = False # 禁止日志向上传播(避免重复输出)
# 2. 定义日志格式(包含更多实用信息,可按需调整)
log_format = logging.Formatter(
'%(asctime)s - %(name)s - %(process)d - %(threadName)s - %(levelname)s - %(message)s',
datefmt='%Y-%m-%d %H:%M:%S' # 统一时间格式
)
# 3. 文件处理器:按大小滚动(10MB/个,无限保留)
log_file = 'shouhou.log'
max_bytes = 10 * 1024 * 1024 # 10MB(字节数)
backup_count = 0 # 0 表示无限保留历史日志(默认值,显式写出更清晰)
# 创建 RotatingFileHandler:达到大小上限时自动创建新文件(文件名后缀为 .1, .2, ...)
file_handler = RotatingFileHandler(
filename=log_file,
maxBytes=max_bytes,
backupCount=backup_count,
encoding='utf-8',
delay=False # 立即创建日志文件(False 为默认,True 则首次日志时才创建)
)
file_handler.setLevel(logging.INFO) # 文件处理器的日志级别(可独立于全局)
file_handler.setFormatter(log_format)
# 4. 控制台处理器(保持原需求,输出到终端)
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.INFO)
stream_handler.setFormatter(log_format)
# 5. 避免重复添加处理器(关键!多次调用时防止日志重复输出)
if not logger.handlers:
logger.addHandler(file_handler)
logger.addHandler(stream_handler)
return logger
# 初始化日志器(全局使用)
logger = setup_logger()
# ---------------------- 测试代码 ----------------------
if __name__ == "__main__":
# 测试日志输出(循环输出10万条,可快速达到10MB验证滚动效果)
for i in range(100000):
logger.info(f"测试日志滚动 - 第 {i+1} 条日志,用于验证10MB自动分割功能")
THE END
0
二维码
打赏
海报
python 笔记&logging
import logging
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[
logg……
共有 0 条评论