当前位置: 首页 > news >正文

PYTHON日志神器nb_log详细介绍和使用说明

个人主页:云纳星辰怀自在

座右铭:“所谓坚持,就是觉得还有希望!


Python的nb_log是一个功能强大且高度灵活的日志记录模块,基于Python内置的logging模块封装,解决了传统日志库的常见痛点(如重复打印、配置复杂等),并增加了多项创新特性。

一、核心特性与优势

  1. 智能print增强

    • 自动捕获所有print输出,添加文件名+行号标记(如 [demo.py:18]

    • 支持IDE控制台点击跳转源码位置

    • 开关:AUTO_PATCH_PRINT = True

  2. 多进程安全切割

    • 内置高性能切割器(log_file_handler_type=1

    • 速度对比:

      平台原生模块nb_log提升倍数
      WindowsConcurrentRotating内置切割器100×
      LinuxConcurrentRotating内置切割器10×
  3. 零重复日志机制

    • 自动修复原生logging重复记录问题

    • 确保同一日志绝不重复输出

  4. 多通道输出

    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_int10DEBUG最详细调试信息
20INFO常规操作信息
30WARNING潜在问题警告
40ERROR操作错误
50CRITICAL系统级错误

示例LogManager('api').log_level_int = 30 # 仅记录WARNING及以上

2. 文件日志参数
参数默认值说明
log_filenameNone主日志文件名
error_log_filenameNone错误日志独立文件
log_path"/pythonlogs"日志存储目录
log_file_size200(MB)切割大小
log_file_backup_count5备份数量
3. 多目标输出参数
目标参数格式示例
钉钉ding_talk_token'dda1xxx'
邮件mail_host+mail_user+mail_passwordSMTP配置
MongoDBmongo_url'mongodb://user:pass@host:port'
Elasticsearches_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数量关闭控制台输出,使用最简日志模板

七、高级技巧

  1. 动态调整日志级别

  • # 运行时调整
    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栈使用。






http://www.xdnf.cn/news/1140697.html

相关文章:

  • leetcode:单词接龙[图广搜][无权图找最短路径]
  • C# 转换(引用转换)
  • 超简单linux上部署Apache
  • React + Mermaid 图表渲染消失问题剖析及 4 种代码级修复方案
  • B 站关键词排名提高之账号互助术:矩阵助攻,流量起飞
  • OpenAI最强ChatGPT智能体发布:技术突破与应用前景分析
  • 前端项目利用Gitlab CI/CD流水线自动化打包、部署云服务
  • 乙烯丙烯酸酯橡胶市场报告:性能优势、行业现状与发展前景​
  • 【现有资料整理】灵枢 - 用于医学领域的 SOTA 多模态大语言模型
  • Java Set 集合详解:从基础语法到实战应用,彻底掌握去重与唯一性集合
  • Pythonday17
  • 群晖中相册管理 immich大模型的使用
  • C++ :vector的介绍和使用
  • MyBatis:配置文件完成增删改查_添加
  • 【RAG实战】用户反馈如何关联算法优化
  • Redisson 分布式锁
  • 构建智能客服Agent:从需求分析到生产部署
  • 使用 jar -xvf 解压JAR文件无反应怎么办?
  • 打车代驾 app 订单管理系统模块搭建
  • IDEA高效开发:Database Navigator插件安装与核心使用指南
  • Android studio和gradle升级后的一些错误
  • 进阶向:智能图像增强系统
  • 零售快销行业中线下巡店AI是如何颠覆传统计算机视觉识别的详细解决方案
  • Python爬虫入门到实战(3)-对网页进行操作
  • Linux 定时任务全解析:atd 与 crond 的区别及实战案例(含日志备份 + 时间写入)
  • 黑马Node.js全套入门教程,nodejs新教程含es6模块化+npm+express+webpack+promise等_ts对象笔记
  • 【问题解决】npm包下载速度慢
  • AI与BI的融合挑战:Strategy平台的差异化优势
  • 小白学Python,网络爬虫篇(2)——selenium库
  • (5)颜色的灰度,亮度,对比度,透明度,都啥意思