【发布时间】:2019-06-07 03:20:52
【问题描述】:
我正在编写 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:30,761 test1 : 天空好蓝
2019-06-07 08:28:30,761 test1:嗨
2019-06-07 08:28:30,761 test2 : 天空好蓝
2019-06-07 08:28:30,761 test2 : 天空好蓝
2019-06-07 08:28:30,762 test2:嗨
2019-06-07 08:28:30,762 test2:嗨
2019-06-07 08:28:30,762 test3 : 天空好蓝
2019-06-07 08:28:30,762 test3 : 天空好蓝
2019-06-07 08:28:30,762 test3 : 天空好蓝
2019-06-07 08:28:30,762 test3:嗨
2019-06-07 08:28:30,762 test3:嗨
2019-06-07 08:28:30,762 test3:嗨
这里的问题是日志信息被多次打印。我认为问题在于我调用 custom_log 方法的方式。
我已经通过https://docs.python.org/2/howto/logging-cookbook.html#using-filters-to-impart-contextual-information。我还是卡住了
我期待如下输出 python logtest.py test1 test2 test2
2019-06-07 08:28:30,761 test1 : 天空好蓝
2019-06-07 08:28:30,761 test1:嗨
2019-06-07 08:28:30,761 test2 : 天空好蓝
2019-06-07 08:28:30,762 test2:嗨
2019-06-07 08:28:30,762 test3 : 天空好蓝
2019-06-07 08:28:30,762 test3:嗨
我想根据函数参数向日志添加不同的上下文。 请帮忙。
【问题讨论】:
-
@VishnuDasu 这没有回答我的用例
-
其实这回答了我的问题。谢谢