代码之家  ›  专栏  ›  技术社区  ›  Jekyll SONG

如何使用logger在python的一行中打印列表

  •  1
  • Jekyll SONG  · 技术社区  · 6 年前

    我想使用在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 作为输入参数。

    有人知道我怎样才能得到想要的输出吗?非常感谢!

    2 回复  |  直到 6 年前
        1
  •  3
  •   Jorkermc    6 年前

    您正在使用一个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

        2
  •  2
  •   Serge Ballesta    6 年前

    输出流(由 print )以及消息日志。流是可能包含换行符的字符序列(或二进制字符串的字节)。然后,当您在终端上显示换行符时(或打印换行符时),这些换行符将被解释。

    日志是 信息 每个消息都应该是原子的。一旦记录了一条消息,就不能向其中添加任何内容,只能记录新消息。

    因此,您必须首先完全构建消息,然后记录它:

    num_list = [1, 2, 3, 4, 5]
    msg = "Numbers in num_list are: " + " ".join(num_list)      # fully build the message
    logger.info(msg)                                            #  and then log it