无法使用结构日志写入磁盘时如何关闭彩色日志记录



我刚刚开始学习如何使用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.prrocessors.KeyValueRenderer或structlog_prrocessors.JSONRenderer,因为ConsoleRender是为控制台中的人工消耗而优化的。:(

注意:颜色的默认值在API文档中是错误的,因为它实际上是基于colorama的存在,而在构建文档时colorama不存在。

最新更新