跳转到主要内容

在日志消息中使用花括号样式字符串格式化

项目描述

bracelogger

Status Version Python

一个Python库,允许在日志消息中使用花括号样式字符串格式化。

特性

  • 支持广泛的Python版本(v2.7 - v3.12)
  • 无依赖
  • 易于使用 - 无需特殊语法
  • 易于从stdlib logging过渡 - 只需更改logging.getLogger调用和消息模板。
  • 仅对由库创建的记录器启用花括号样式格式化。这允许逐步过渡到花括号样式格式化,而不会破坏现有的记录器或第三方包。
  • 消息的格式化将延迟到输出时(或者在日志消息被过滤的情况下完全不进行格式化)。
  • 传递给日志调用的参数将像往常一样存储在logging.LogRecord对象中。

安装

pip install bracelogger

使用示例

# import the library
from bracelogger import get_logger

# set up the logger
__log__ = get_logger(__name__)

# use brace-style formatting in log messages
try:
    process(some_obj)
except Exception:
    __log__.warning(
        "Failed to process object '{0!r}' with name '{0.name}' and path '{0.path}'",
        some_obj,
        exc_info=True
    )

请注意,上述示例非常基础。该模块的真实威力在于能够使用花括号样式格式化提供的更高级操作。有关更多详细信息,请参阅格式化字符串语法的文档

基于键的格式化

标准库中的日志记录器有一个特殊情况(从Python 2.4引入),在将单个非空字典传递到日志消息时可以使用基于键的格式化

__log__.info("a:%(a)s, b:%(b)s", {"a": 1, "b": 2})

使用花括号样式格式化也支持此功能

# These both produce the same log message:
__log__.info("a:{a}, b:{b}", {"a": 1, "b": 2})
__log__.info("a:{0[a]}, b:{0[b]}", {"a": 1, "b": 2})

与现有代码和日志记录器的兼容性

此库将仅为此模块的get_logger()函数创建的日志记录器启用花括号样式格式化。通过stdlib logging.getLogger()函数创建的日志记录器仍将使用基于%的常规格式化。

此可选样式意味着代码库可以逐步过渡到花括号样式日志记录,而无需一次性转换所有内容。这也意味着来自任何第三方代码(如库)的日志将继续按正常工作。

除了与现有代码兼容外,还应与大多数其他stdlib兼容的日志记录包和修改兼容。与使用stdlib日志记录器时一样,消息参数仍然存储在日志记录中,并且只有在处理消息时才会进行格式化(如果消息被过滤,则根本不会进行格式化)。

将现有代码转换为花括号样式格式化

因为没有特殊的语法要求,所以将现有日志迁移到花括号样式格式化很容易

  1. 将使用logging.getLogger(name)创建的日志记录器更改为使用bracelogger.get_logger(name)
  2. 将日志记录器的日志消息更改为使用花括号样式格式化(例如,将%s更改为{}

测试

此软件包包含基本测试。要运行它们,请安装pytestpip install pytest),然后在项目目录中运行py.test

许可证

根据GNU LGPLv3授权。

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分发

bracelogger-1.1.1.tar.gz (5.1 kB 查看散列)

上传时间

构建分发

bracelogger-1.1.1-py3-none-any.whl (3.8 kB 查看散列)

上传时间 Python 3

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面