当前位置: 首页 > 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.lryc.cn/news/592237.html

相关文章:

  • 数据统计模块后端架构解析:从Controller到SQL的ECharts数据对接实践
  • div和span区别
  • 为什么IoTDB成为物联网场景的技术优选?
  • Vue3 业务落地全景:脚手架、权限、国际化、微前端、跨端与低代码 50 条实战心法
  • 差分数组算法
  • ElasticSearch Doc Values和Fielddata详解
  • Android音视频探索之旅 | Webrtc 1对1音视频通话核心流程分析
  • 力扣347:前K个高频元素
  • [AI8051U入门第五步]modbus_RTU主机
  • 《Python Web 框架深度剖析:Django、Flask 与 FastAPI 的选择之道》
  • 数据库防止数组字符串序列化
  • Python暑期学习笔记5
  • C++编程学习(第10天)
  • 近期遇到的问题汇总
  • 微信小程序商品结算功能
  • 【嵌入式硬件实例】-555定时器实现LED追逐效果
  • 后端参数校验
  • LP-MSPM0G3507学习--05管脚中断
  • 网络基础12--可靠性概述及要求
  • postman接口测试,1个参数有好几个值的时候如何测试比较简单快速?
  • Leetcode 04 java
  • 今日行情明日机会——20250718
  • 【Spring WebFlux】什么是响应式编程
  • Linux入门篇学习——借助 U 盘或 TF 卡拷贝程序到开发板上
  • 证券行业 SCRM 落地:企业微信与系统协同的合规技术方案
  • 二进制写入与文本写入的本质区别:系统视角下的文件操作
  • 数据结构:顺序表和链表
  • 【PTA数据结构 | C语言版】我爱背单词
  • 【PTA数据结构 | C语言版】二叉堆的朴素建堆操作
  • HTML 页面禁止缩放功能