【Python技巧】在Python中如何优雅地记日志

【Python技巧】在Python中如何优雅地记日志
最新回答
和快乐签约

2020-08-20 23:52:15

在Python中,使用第三方库Loguru可以更优雅地记录日志,其设计目标是简化日志操作,提供丰富的功能且无需复杂配置。以下是具体使用方法和核心特性:

一、安装Loguru

直接通过pip安装:

pip install loguru二、基础用法
  1. 终端输出日志导入logger后直接调用日志级别方法:

    from loguru import loggerlogger.debug("This is a debug message")logger.info("This is an info message")logger.warning("This is a warning message")logger.error("This is an error message")终端输出带颜色,直观区分日志级别
  2. 输出到文件使用add()方法指定日志文件路径:

    logger.add("app.log") # 日志写入到app.log文件logger.info("This message will be saved to file")
三、核心特性
  1. 开箱即用Loguru预置了默认的日志格式和颜色,无需初始化配置,导入即可使用:

    from loguru import loggerlogger.info("Beautiful and simple logging!")
  2. 灵活的日志配置通过add()方法自定义输出格式、过滤规则和日志级别:

    logger.add( "info.log", format="{time} {level} {message}", # 自定义格式 filter="my_module", # 过滤特定模块日志 level="INFO" # 只记录INFO及以上级别)
  3. 文件管理

    按大小分割:日志文件超过500MB时自动创建新文件。

    logger.add("file_1.log", rotation="500 MB")

    按时间分割:每天12点或每周创建新文件。

    logger.add("file_2.log", rotation="12:00") # 每天12点logger.add("file_3.log", rotation="1 week") # 每周

    日志保留与压缩:保留最近10天的日志,或自动压缩为ZIP格式。

    logger.add("file_4.log", retention="10 days") # 保留10天logger.add("file_5.log", compression="zip") # 压缩为ZIP
  4. 字符串格式化支持{}占位符,类似str.format(),可传递变量或关键字参数:

    logger.info("Using Python {}, prefer {feature}!", 3.8, feature="f-strings")
  5. 异常捕获使用@logger.catch装饰器自动捕获函数中的异常并记录完整堆栈:

    @logger.catchdef divide(a, b): return a / bdivide(1, 0) # 自动记录ZeroDivisionError异常记录异常时显示完整堆栈和变量值
  6. 自定义颜色通过HTML标签修改日志颜色(终端需支持颜色渲染):

    logger.add( sys.stdout, colorize=True, format="<green>{time}</green> <level>{message}</level>")
  7. 线程与多进程安全

    默认线程安全,多进程环境下启用enqueue参数:

    logger.add("file.log", enqueue=True) # 多进程安全
  8. 完整异常堆栈启用backtrace和diagnose参数显示变量值和敏感数据(生产环境慎用):

    logger.add("out.log", backtrace=True, diagnose=True)

    显示变量值和代码位置
  9. 日期时间格式化自定义时间格式,例如:

    logger.add( "file.log", format="{time:YYYY-MM-DD HH:mm:ss} | {level} | {message}")
  10. 邮件通知结合notifiers库在发生错误时发送邮件:

    import notifiersfrom notifiers.logging import NotificationHandlerparams = { "username": "you@gmail.com", "password": "abc123", "to": "dest@gmail.com"}# 错误日志触发邮件handler = NotificationHandler("gmail", defaults=params)logger.add(handler, level="ERROR")
四、总结

Loguru通过以下优势提升日志体验:

  • 简化配置:无需初始化,导入即用。
  • 功能丰富:支持文件管理、异常捕获、颜色定制等。
  • 易扩展:可与邮件通知、多进程等场景集成。

建议参考

Loguru官方文档
详细指南
探索更多高级用法。