在python中使用多个参数进行记录 [英] Logging with multiple parameters in python

查看:602
本文介绍了在python中使用多个参数进行记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在python日志记录模块中,日志的格式如下:

In python logging module Log is formatted using below :

formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

**simple_example.py**
# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')

哪个输出如下:

输出:

2005-03-19 15:10:26,618 - simple_example - DEBUG - debug message
2005-03-19 15:10:26,620 - simple_example - INFO - info message
2005-03-19 15:10:26,695 - simple_example - WARNING - warn message

我只是想知道是否有任何方法可以添加多个消息,而不是在末尾添加,例如

I am just wondering if there is any way to add multiple messages not at the end but in between i.e something like

 My custome message 1  - simple_example - DEBUG - my custom message 2

有什么办法可以格式化它:

Is there any way I could format it like:

formatter = logging.Formatter('%(message1)s - %(name)s - %(levelname)s - %(message2)s')

任何帮助将不胜感激

推荐答案

您可以编写自己的Formatter类,并将多余的消息作为kwargs传递:

You could write your own Formatter class and pass your extra message as kwargs:

import logging

class MyFormatter(logging.Formatter):
    def format(self, record):
        record.message2 = record.args.get("message2")
        return super().format(record)

logger = logging.getLogger('test')
ch = logging.StreamHandler()
formatter = MyFormatter('%(asctime)s - %(message2)s - %(name)s - %(levelname)s - %(message)s')
ch.setFormatter(formatter)
ch.setLevel(logging.ERROR)
logger.addHandler(ch)

logger.error("debug message", {"message2": "Blub"})

输出:

2019-02-08 14:33:50,487-模糊-测试-错误-调试消息

2019-02-08 14:33:50,487 - Blub - test - ERROR - debug message


编辑:我不知道为什么这不能在INFO级别即用的情况下工作,但是您可以执行以下操作,这将起作用:


I do not know, why this does not work out-of-the-box with INFO level, but you could do the following, which will work:

import logging

class MyFormatter(logging.Formatter):
    def format(self, record):
        record.message2 = record.args.get("message2")
        return super().format(record)

logger = logging.getLogger('test')
ch = logging.StreamHandler()
ch.setFormatter(MyFormatter('%(asctime)s - %(message2)s - %(name)s - %(levelname)s - %(message)s'))
logging.basicConfig( level=logging.INFO, handlers=[ch] )

logger.info("debug message", {"message2": "Blub"})

输出:

2019-02-11 12:53:17,014-模糊-测试-信息-调试消息

2019-02-11 12:53:17,014 - Blub - test - INFO - debug message


为了不使用 message2 来提供字典,您可以按以下方式更改代码:


Edit 2: For this to work w/o providing a dict with message2, you can change the code as follows:

import logging

class MyFormatter(logging.Formatter):
    def format(self, record):
        record.message2 = ""
        if(record.args):
            record.message2 = record.args.get("message2", "Fallback Value")
        return super().format(record)

logger = logging.getLogger('test')
ch = logging.StreamHandler()
ch.setFormatter(MyFormatter('%(asctime)s - %(message2)s - %(name)s - %(levelname)s - %(message)s'))
logging.basicConfig( level=logging.INFO, handlers=[ch] )

logger.info("debug message", {"message2": "Blub"})
logger.info("This is my sample log")
logger.info("This is my sample log", {"hello": "World"})

输出:

2019-02-11 13:20:53,419 - Blub - test - INFO - debug message
2019-02-11 13:20:53,419 -  - test - INFO - This is my sample log
2019-02-11 13:20:53,419 - Fallback Value - test - INFO - This is my sample log

这篇关于在python中使用多个参数进行记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆