当前位置: 首页 > 面试题库 >

如何在Python日志格式字符串中添加自定义字段?

崔绍辉
2023-03-14
问题内容

我当前的格式字符串是:

formatter = logging.Formatter('%(asctime)s : %(message)s')

我想添加一个新字段app_name,在包含该格式化程序的每个脚本中它将具有不同的值。

import logging
formatter = logging.Formatter('%(asctime)s %(app_name)s : %(message)s')
syslog.setFormatter(formatter)
logger.addHandler(syslog)

但是我不确定如何将该app_name值传递给记录器以内插到格式字符串中。我显然可以通过每次传递它使其出现在日志消息中,但这很麻烦。

我试过了:

logging.info('Log message', app_name='myapp')
logging.info('Log message', {'app_name', 'myapp'})
logging.info('Log message', 'myapp')

但没有任何作用。


问题答案:

您可以使用LoggerAdapter,这样就不必在每次记录调用时都传递额外的信息:

import logging
extra = {'app_name':'Super App'}

logger = logging.getLogger(__name__)
syslog = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s %(app_name)s : %(message)s')
syslog.setFormatter(formatter)
logger.setLevel(logging.INFO)
logger.addHandler(syslog)

logger = logging.LoggerAdapter(logger, extra)
logger.info('The sky is so blue')

日志(类似)

2013-07-09 17:39:33,596 Super App : The sky is so blue

过滤器还可用于添加上下文信息。

import logging

class AppFilter(logging.Filter):
    def filter(self, record):
        record.app_name = 'Super App'
        return True

logger = logging.getLogger(__name__)
logger.addFilter(AppFilter())
syslog = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s %(app_name)s : %(message)s')
syslog.setFormatter(formatter)
logger.setLevel(logging.INFO)
logger.addHandler(syslog)

logger.info('The sky is so blue')

产生类似的日志记录。



 类似资料:
  • 问题内容: 目前,我仅显示键,每个键都在新行中显示: 如何在新行中将它们显示为 key :: value ? 问题答案: 通过迭代器,将生成一个键,值元组: 更新为现代符号:

  • 问题内容: 如果我有一个字符串变量: 我想在每一个前面加一个转义字符和 变量中 (即 未 竟逃脱字符),我该怎么做? 问题答案: 我不是在这里要求优雅,但我 认为 它可以满足您的要求(如果我误会了,请纠正我): 输出

  • 我正在使用Python 3.8.8和包含的日志库。要在Python中使用通用字符串格式,我还想使用记录新的格式字符串变体。我还想使用日志字符串的延迟评估(因此没有或)。 根据这篇关于pylint的堆栈溢出帖子(因此pylint日志格式样式=new),以下变体应该可以工作。但是,日志记录中有一个异常。信息。 最后一行的例外情况如下: 我从异常消息推断,日志记录仍然需要使用旧式格式,即。 如何在登录P

  • 本文向大家介绍Python日志:自定义输出字段 json格式输出方式,包括了Python日志:自定义输出字段 json格式输出方式的使用技巧和注意事项,需要的朋友参考一下 最近有一个需求:将日志以json格式输出, 并且有些字段是logging模块没有的.看了很多源码和资料, 终于搞定, 抽取精华分享出来, 一起成长. 运行结果: 其实就是重写了logging.Filter的filter方法,自定

  • 问题内容: 我想在SqlServer连接字符串中添加一些自定义属性,如下所示: 然后在sql中获取该属性。例如 问题答案: 没有通用的方法可以通过客户端API传递自定义连接字符串属性并使用T-SQL进行检索。但是,您有许多选择。以下是一些。 方法1:在连接字符串中使用Application Name关键字最多传递128个字符,并使用APP_NAME()T-SQL函数进行检索: 请注意,此限制为12