Python向循环中的日志记录添加上下文
我正在编写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
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
@毗湿奴多这并没有回答我的用例实际上这回答了我的问题。谢谢