跳转到主要内容

使用stdlib的日志记录与新的格式规范迷你语言。

项目描述

foffinf

使用stdlib的日志记录与新的格式规范迷你语言。

什么?

我们知道这样做是不好的

logger.info(f"The result is {result:05d}")

我们绝对不应该自己构建日志消息,主要是因为使用logging避免了以下两种情况

  • 性能:如果日志级别低于INFO(在示例的情况下)则不会真正构建结果消息
  • 鲁棒性:如果result碰巧不是一个数字,那么示例将会崩溃,但logging基础结构只会显示一些错误消息(然后一切照常进行)

推荐的方式是

logger.info("The result is %05d", result)

但是等等,我们生活在21世纪,我们还在使用printf风格的字符串格式化吗?

使用foffinf我们现在可以写

logger.info("The result is {:05d}", result)

欢迎来到未来!

dino

相信恐龙 :)

如何使用它

遗憾的是我们不能在我们的进程中设置整个日志系统来使用这种新格式,因为我们很可能会使用第三方库,这些库实际上使用了旧的日志调用方式,我们不希望破坏它们。

所以我们需要指定哪个模块(我们正在编写的模块)应该使用它。这是通过一个foffinf.formatize调用完成的。按照使用模块名称的标准,我们只需

import logging
import foffinf

foffinf.formatize(__name__)
logger = logging.getLogger(__name__)

# ...

logger.info("The result is {:05d}", result)

影响特定的logger模块不会影响其父模块或任何兄弟模块。

fofinff.formatize("mylib.mod1")

logging.getLogger("mylib.mod1")  # affected!
logging.getLogger("mylib")  # NOT affected
logging.getLogger("mylib.mod2")  # NOT affected 
logging.getLogger()  # NOT affected 
logging.getLogger("otherlib")  # NOT affected 
logging.getLogger("mylib.mod1.submod")  # NOT affected 

注意(在最后一行)默认情况下它也不会影响子模块。为了影响logger树节点所有子节点

fofinff.formatize("mylib.mod1", scatter=True)

logging.getLogger("mylib.mod1")  # affected!
logging.getLogger("mylib")  # NOT affected
logging.getLogger("mylib.mod2")  # NOT affected 
logging.getLogger("mylib.mod1.submod_a")  # affected!
logging.getLogger("mylib.mod1.submod_b")  # affected!

项目详情


下载文件

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

源代码分布

foffinf-0.1.tar.gz (6.8 kB 查看哈希值)

上传时间 源代码

构建分布

foffinf-0.1-py3-none-any.whl (7.0 kB 查看哈希值)

上传时间 Python 3