Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python向循环中的日志记录添加上下文_Python_Logging - Fatal编程技术网

Python向循环中的日志记录添加上下文

Python向循环中的日志记录添加上下文,python,logging,Python,Logging,我正在编写python代码,以便根据后续方法动态地将上下文信息添加到日志中。 下面是代码 import logging class AppFilter(logging.Filter): def __init__(self,app_name): self.app_name=app_name def filter(self, record): record.app_name = self.app_name return True

我正在编写python代码,以便根据后续方法动态地将上下文信息添加到日志中。 下面是代码

import logging

class AppFilter(logging.Filter):

    def __init__(self,app_name):
        self.app_name=app_name

    def filter(self, record):
        record.app_name = self.app_name
        return True


def custom_log(app):

    logger = logging.getLogger(__name__)

    logger.addFilter(AppFilter(app))

    syslog = logging.StreamHandler()

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

    syslog.setFormatter(formatter)

    logger.setLevel(logging.INFO)

    logger.addHandler(syslog)

    return logger

def stuckTran(app):

    logger=custom_log(app)

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

    logger.info('hi')

list1=sys.argv[1:]

for a in list1:

    stuckTran(a)
以下是输出:

2019-06-07 08:28:30761测试1:天空太蓝了

2019-06-07 08:28:30761测试1:嗨

2019-06-07 08:28:30761测试2:天空是如此的蓝

2019-06-07 08:28:30761测试2:天空是如此的蓝

2019-06-07 08:28:30762测试2:嗨

2019-06-07 08:28:30762测试2:嗨

2019-06-07 08:28:30762测试3:天空太蓝了

2019-06-07 08:28:30762测试3:天空太蓝了

2019-06-07 08:28:30762测试3:天空太蓝了

2019-06-07 08:28:30762测试3:hi

2019-06-07 08:28:30762测试3:hi

2019-06-07 08:28:30762测试3:hi

这里的问题是日志信息被多次打印。我认为问题在于我调用自定义日志方法的方式

我已经经历过了。我还是被卡住了

我期待输出如下 python logtest.py test1 test2 test2

2019-06-07 08:28:30761测试1:天空太蓝了

2019-06-07 08:28:30761测试1:嗨

2019-06-07 08:28:30761测试2:天空是如此的蓝

2019-06-07 08:28:30762测试2:嗨

2019-06-07 08:28:30762测试3:天空太蓝了

2019-06-07 08:28:30762测试3:hi

我想根据函数参数向日志添加不同的上下文。 请提供帮助。

日志记录是一个单例类,即一次只能有一个实例。因此,每次调用
custom_log()
时,您并不是在创建一个新实例,而是在
logging
对象中添加处理程序。要解决此问题,可以清除现有的
处理程序
。修改后的
custom\u log
功能将是:

def custom_log(app):

    logger = logging.getLogger(__name__)

    logger.handlers.clear()

    logger.addFilter(AppFilter(app))

    syslog = logging.StreamHandler()

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

    syslog.setFormatter(formatter)

    logger.setLevel(logging.INFO)

    logger.addHandler(syslog)

    return logger

@毗湿奴多这并没有回答我的用例实际上这回答了我的问题。谢谢