PYTHON日志神器nb_log详细介绍和使用说明
个人主页:云纳星辰怀自在
座右铭:“所谓坚持,就是觉得还有希望!”
Python的
nb_log
是一个功能强大且高度灵活的日志记录模块,基于Python内置的logging
模块封装,解决了传统日志库的常见痛点(如重复打印、配置复杂等),并增加了多项创新特性。
一、核心特性与优势
-
智能
print
增强-
自动捕获所有
print
输出,添加文件名+行号标记(如[demo.py:18]
) -
支持IDE控制台点击跳转源码位置
-
开关:
AUTO_PATCH_PRINT = True
-
-
多进程安全切割
-
内置高性能切割器(
log_file_handler_type=1
) -
速度对比:
平台 原生模块 nb_log 提升倍数 Windows ConcurrentRotating 内置切割器 100× Linux ConcurrentRotating 内置切割器 10×
-
-
零重复日志机制
-
自动修复原生logging重复记录问题
-
确保同一日志绝不重复输出
-
-
多通道输出
graph LR A[Logger] --> B[控制台] A --> C[日志文件] A --> D[钉钉] A --> E[邮件] A --> F[MongoDB] A --> G[Kafka]
二、安装与配置
1. 安装方式
# 标准安装
pip install nb_log# 国内镜像加速
pip install nb_log==8.4 -i https://pypi.tuna.tsinghua.edu.cn/simple
2. 初始化配置
import nb_log # 自动生成配置文件
from nb_log import LogManager# 默认日志器(生成在项目根目录)
logger = LogManager('app').get_logger_and_add_handlers()
logger.info("安装成功!") # 控制台显示彩色日志[1,3](@ref)
-->环境问题:
-
若未生成配置文件,设置
PYTHONPATH
指向项目根目录:export PYTHONPATH=/your/project/path # Linux/Mac set PYTHONPATH=C:\your\project\path # Windows[3,6](@ref)
3. 配置文件 nb_log_config.py
# 关键配置项
DEFAULUT_USE_COLOR_HANDLER = True # 控制台彩色输出
AUTO_PATCH_PRINT = True # 增强print功能
LOG_FILE_SIZE = 200 # 切割大小(MB)
LOG_FILE_BACKUP_COUNT = 5 # 备份文件数
LOG_FILE_HANDLER_TYPE = 1 # 多进程安全切割
三、参数详解与用法
1. 日志级别控制
参数 | 取值 | 级别 | 说明 |
---|---|---|---|
log_level_int | 10 | DEBUG | 最详细调试信息 |
20 | INFO | 常规操作信息 | |
30 | WARNING | 潜在问题警告 | |
40 | ERROR | 操作错误 | |
50 | CRITICAL | 系统级错误 |
示例:LogManager('api').log_level_int = 30 # 仅记录WARNING及以上
2. 文件日志参数
参数 | 默认值 | 说明 |
---|---|---|
log_filename | None | 主日志文件名 |
error_log_filename | None | 错误日志独立文件 |
log_path | "/pythonlogs" | 日志存储目录 |
log_file_size | 200(MB) | 切割大小 |
log_file_backup_count | 5 | 备份数量 |
3. 多目标输出参数
目标 | 参数 | 格式示例 |
---|---|---|
钉钉 | ding_talk_token | 'dda1xxx' |
邮件 | mail_host +mail_user +mail_password | SMTP配置 |
MongoDB | mongo_url | 'mongodb://user:pass@host:port' |
Elasticsearch | es_hosts | ['http://user:pass@host:port'] |
四、场景化代码示例
1. 基础日志记录
logger = LogManager('core').get_logger_and_add_handlers(log_level_int=10,log_filename="app.log",error_log_filename="errors.log",log_file_size=200,log_file_handler_type=1
)# print自动增强
print("用户登录") # 输出:[app.py:25] 用户登录# 分级记录
logger.debug("SQL: SELECT * FROM users") # 控制台绿色
logger.info("用户A登录成功") # 控制台蓝色
logger.error("数据库连接失败") # 同时写入app.log和errors.log
2. 实时钉钉告警
alert_logger = LogManager('monitor').get_logger_and_add_handlers(ding_talk_token='dda1xxx',is_add_stream_handler=False,log_level_int=40
)# 错误发生时
alert_logger.error("服务异常!CPU使用率95%", extra={'钉钉标题': '服务器紧急告警'}) # 推送钉钉
3. 多进程日志切割
from multiprocessing import Processdef worker(worker_id):logger = LogManager(f'worker_{worker_id}').get_logger_and_add_handlers(log_filename='task.log',log_file_handler_type=1 # 关键参数)for i in range(1000):logger.info(f"Worker {worker_id} 处理任务 {i}")if __name__ == '__main__':procs = [Process(target=worker, args=(i,)) for i in range(8)][p.start() for p in procs][p.join() for p in procs]
4. 自定义日志格式
class CompactFormatter(logging.Formatter):def format(self, record):return f"{record.asctime} | {record.levelname:.1} | {record.msg}"# 应用自定义格式
logger = LogManager('custom').get_logger_and_add_handlers(log_filename="custom.log"
)
for handler in logger.handlers:handler.setFormatter(CompactFormatter())logger.info("精简格式测试") # 输出:2025-07-16 14:30 | I | 精简格式测试
五、最佳实践指南
1. 环境差异化配置
# nb_log_config.py
import os# 开发环境
if os.getenv('ENV') == 'dev':DEFAULUT_USE_COLOR_HANDLER = TrueAUTO_PATCH_PRINT = TrueLOG_LEVEL = 10 # DEBUG# 生产环境
else:DEFAULUT_USE_COLOR_HANDLER = FalseLOG_LEVEL = 20 # INFODING_TALK_TOKEN = 'dda1xxx' # 全局钉钉配置
2. 模块化日志管理
# service_logger.py
from nb_log import LogManagerclass ServiceLogger:def __init__(self, service_name):self.logger = LogManager(service_name).get_logger_and_add_handlers(error_log_filename=f"{service_name}_errors.log",log_file_handler_type=1)def critical_error(self, msg):self.logger.error(msg)# 可扩展:添加邮件/短信告警逻辑# 使用示例
user_logger = ServiceLogger('user_service')
order_logger = ServiceLogger('order_service')
3. 高性能配置方案
# 10K+ QPS系统推荐配置
high_perf_logger = LogManager('gateway').get_logger_and_add_handlers(is_add_stream_handler=False, # 关闭控制台log_filename='gateway.log',log_file_size=1024, # 1GB切割log_file_handler_type=1, # 多进程安全formatter_template=7 # 使用最简模板
)
六、故障排查手册
故障现象 | 诊断步骤 | 解决方案 |
---|---|---|
配置文件未生成 | 检查Python路径 | 设置PYTHONPATH=/项目根目录 |
钉钉消息未发送 | 验证Token格式 | 使用完整Webhook Token(以dda1xxx 开头) |
日志重复记录 | 检查Handler数量 | 确保未混用原生logging 添加额外Handler |
权限拒绝错误 | 检查目录权限 | Linux: chmod -R 777 /pythonlogs Windows: 目录属性→安全→完全控制 |
多进程日志丢失 | 确认切割类型 | 设置log_file_handler_type=1 |
性能瓶颈 | 检查Handler数量 | 关闭控制台输出,使用最简日志模板 |
七、高级技巧
-
动态调整日志级别
-
# 运行时调整 LogManager('api').log_level_int = 40 # 生产环境突发问题临时调高
-
日志分级存储
-
# 将ERROR+日志单独存储 LogManager('db').get_logger_and_add_handlers(error_log_filename='db_critical.log',error_log_level=40 )
-
Kafka日志收集
kafka_logger = LogManager('kafka').get_logger_and_add_handlers(kafka_bootstrap_servers=['kafka1:9092', 'kafka2:9092'],kafka_topic='app_logs')
八、官方资源
-
📚 官方文档
-
💻 GitHub仓库
-
🐍 PyPI项目
-
🚀 性能测试报告
终极提示:生产环境部署前务必测试日志切割功能,使用命令
logrotate -f /path/to/your/log.conf
验证切割配置可靠性。对于日均GB级日志系统,建议启用log_file_handler_type=1
并配合ELK栈使用。