在python中动态更改日志格式化程序?

2024-09-27 01:27:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用python日志记录,在程序的某一点上,我需要这样的日志记录格式

"[%(asctime)s] [%(service_id)s] [%(
    levelname)s] [%(hostname)s] [%(host_ip)s] [%(client_agent)s] [%(client_ip)s] [%(filename)20s:%(lineno)d]"

还有一点我需要这样的格式等等

 "[%(asctime)s] [%(service_id)s] [%(
    levelname)s] [%(hostname)s] [%(host_ip)s]"

我的日志格式应该在整个程序中动态更改。如何做到这一点


Tags: 程序ipclientidhost格式service记录
1条回答
网友
1楼 · 发布于 2024-09-27 01:27:04

您可以通过调用以下命令更改格式:

logging.basicConfig(format="%(asctime)s %(service_id)s %(
levelname)s %(hostname)s %(host_ip)s %(message)s")

logging.basicConfig(
  format="%(asctime)s {} %(message)s".format(get_your_hostname_somewhere())
)

正如blues评论所指出的,以上内容仅适用于初始设置

我相信要像这样获取hostname(以及所有其他奇特的数据),您需要实现一个logging.Filter或者将其格式化到您的日志消息中,如果它们是在您调用记录器的上下文中定义的

在第二次审查之后,我发现this HOWTO可能也会有帮助,一个给定的例子可以大致如下:

import logging

# create logger
logger = logging.getLogger('simple_example')
logger.setLevel(logging.DEBUG)

# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)

# create formatter
formatter = logging.Formatter('%(asctime)s %(service_id)s %(
levelname)s %(hostname)s %(host_ip)s %(message)s')

# add formatter to ch
ch.setFormatter(formatter)

# add ch to logger
logger.addHandler(ch)

logger.info("message")

在另一个文件中,获取记录器并再次定义处理程序,但使用新格式定义格式化程序

相关问题 更多 >

    热门问题