structlog - 无法弄清楚如何在使用 structlog 写入磁盘时关闭彩色日志记录
问题描述
我刚刚开始学习如何使用structlog
,我很难弄清楚如何在写入文件时关闭彩色日志记录。本质上,我所做的是将与标准日志记录模块一起使用的旧代码转换为与 structlog 一起使用 - 这就是我想出的:
formatter = logging.Formatter(
fmt=LOGGER_OUTPUT_FORMAT,
datefmt=LOGGER_DATETIME_FORMAT,
)
handler = logging.StreamHandler()
handler.setLevel(level)
handler.setFormatter(formatter)
logger.addHandler(handler)
# create a file handler
formatter = logging.Formatter(
fmt=LOGGER_OUTPUT_FORMAT,
datefmt=LOGGER_DATETIME_FORMAT,
)
handler = RotatingFileHandler(
filename=LOGFILE_PATH,
maxBytes=4000000,
backupCount=20,
)
handler.setLevel(level)
handler.setFormatter(formatter)
logger.addHandler(handler)
structlog.configure(logger_factory=LoggerFactory())
logger = structlog.getLogger('output_logger')
我不知道该怎么做是在哪里插入行以更改格式化程序,以便在将日志记录输出保存到文件时不使用彩色输出。我猜我可以卸载colorama
,但这似乎违背了实际学习如何使用 structlog 的目的。我已经仔细研究了 structlog 手册,但这对我来说没有意义,而且我似乎尝试的一切都会引发错误,所以任何指导都将不胜感激!
解决方案
根据您想要实现的确切目标,您必须将更多配置添加到structlog.configure
.
如果您希望 stdlib 日志记录和 structlog 合作,请查看https://www.structlog.org/en/stable/standard-library.html
如果您只想使用 structlog 的原生记录器而不使用颜色,您现在只需要调整您的处理器。
正如入门教程所说,默认值为
[
structlog.processors.StackInfoRenderer(),
structlog.dev.set_exc_info,
structlog.processors.format_exc_info,
structlog.processors.TimeStamper(),
structlog.dev.ConsoleRenderer()
]
如果 colorama 存在,那是五颜六色的。最简单的更改是将其更改为
[
structlog.processors.StackInfoRenderer(),
structlog.dev.set_exc_info,
structlog.processors.format_exc_info,
structlog.processors.TimeStamper(),
structlog.dev.ConsoleRenderer(colors=False)
]
尽管生产代码可能应该使用structlog.processors.KeyValueRenderer或structlog.processors.JSONRenderer,因为 ConsoleRenderer 已针对...控制台中的人类消费进行了优化。:)
请注意,API 文档中的颜色默认值目前是错误的,因为它实际上是基于 colorama 的存在,而在构建文档时 colorama 不存在。
推荐阅读
- html - CSS 网格和溢出
- excel - TextBox ClassModule - 仅在实际值更改时更改背景颜色
- javascript - 如何在我的正则表达式中放置换行符以使其更具可读性?
- javascript - 删除在一个下拉列表字段中选择的选项,并且不显示在该行中存在的其他下拉列表中不起作用-jquery
- php - 填充 $_FILES 不返回文件扩展名
- vba - 在 VBA 中创建评估字符串
- r - ggplot 中使用 geom_line 的时间序列
- php - 如何将位图从android发送到php文件
- java - OkHttp 是否有类似于 Unirest 的用于创建 RequestBody 的字段方法的更简单的方法?
- c# - 如何在 C# JArray 中检查是否有特定的密钥对