我当前的格式字符串是:
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
Filters也可用于添加上下文信息。
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')
产生类似的日志记录。
关于python - 如何将自定义字段添加到 Python 日志格式字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17558552/