如何使用 logger 在 Python 中仅一行打印列表

新手上路,请多包涵

我想在 Python 3.6 中仅使用一行日志来打印列表。目前我的代码看起来像这样。

 logger = logging.getLogger()
logger.setLevel(log_level)
ch = logging.StreamHandler(sys.stdout)
ch.setLevel(log_level)
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
ch.setFormatter(formatter)
logger.addHandler(ch)

# some codes in-between

num_list = [1, 2, 3, 4, 5]
logger.info("Numbers in num_list are: ")
for item in num_list:
    logger.info(item)

我想要得到的是

2018-07-23 17:29:30,200 - root - INFO - Numbers in num_list are: 1 2 3 4 5

但是,我会得到

2018-07-23 17:29:30,200 - root - INFO - Numbers in num_list are:
2018-07-23 17:29:30,200 - root - INFO - 1
2018-07-23 17:29:30,200 - root - INFO - 2
2018-07-23 17:29:30,200 - root - INFO - 3
2018-07-23 17:29:30,200 - root - INFO - 4
2018-07-23 17:29:30,200 - root - INFO - 5

我知道如果我使用 print 输出,我可以使用 print(item, end=" ") 明确更改输出后的内容。但是,日志记录似乎不接受 end 作为输入参数。

有谁知道我如何获得所需的输出?非常感谢!

原文由 Jekyll SONG 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 714
2 个回答

您正在使用 for 循环遍历所有列表并一次一次尝试记录它: logger.info("Numbers in num_list are: {}".format(' '.join(map(str, num_list)))) 一次发布它们

请参阅: https ://docs.python.org/3/library/stdtypes.html?highlight=str#str.join

原文由 Jorkermc 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以将格式字符串和参数传递给 logging

debug() 文档 使用这个例子:

 d = {'clientip': '192.168.0.1', 'user': 'fbloggs'}
logging.warning('Protocol problem: %s', 'connection reset', extra=d)

对于您的情况,您可以将 num_list 作为字符串传递给格式字符串,它会为您打印出来。

 >>> num_list = [1, 2, 3, 4, 5, ]
>>> logger.info("Numbers in num_list are: %s", num_list)
INFO: Numbers in num_list are: [1, 2, 3, 4, 5]

>>> num_list = [1, 2, 3, 4, 5, [44,454,54], { "aa": 234} ]
>>> logger.info("Complex example: %s", num_list)
INFO: Complex example: [1, 2, 3, 4, 5, [44, 454, 54], {'aa': 234}]

正如@Maico Timmerman 指出的那样:

最好让日志记录模块使用 %-syntax 进行实际格式化,因为消息可能根本不会被打印出来。

原文由 idbrii 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题