如何在Python的日志文件中写入标题

时间:2019-06-25 15:55:49

标签: python python-3.x logging

我已经制作了一个日志文件。现在我想在日志文件中打印标题。这样一来,您就可以确定该列的用途。

我提供了我编写的代码。

TICKET NO       DATE        TIME         NAME    USER   MESSAGE

INC0010265 -  2019-06-25 20:41:54,286 -  log  -  INFO - Mail Send Succesfully
INC0010265 -  2019-06-25 20:41:56,271 -  log  -  INFO - INC0010265  Ticket Update Succesfully
INC0010265 -  2019-06-25 20:41:56,271 -  log  -  INFO - -----Ticket Closed-----

我要这样打印:

{{1}}

1 个答案:

答案 0 :(得分:0)

这不是您要的100%,但是我能想到的最接近。

首先,对于同一程序,您不应多次调用basicConfig。它实际上什么也没做...

此外,通过定义检查消息类型的函数,您还失去了logging的功能。调用logger.info以获得错误消息看起来很可笑。您应该要做的是使用Handler。查看此代码:

import logging

logger = logging.getLogger(__name__)
log_file = str(datetime.utcnow().strftime('%d_%m_%Y')) + '.log'

error_handler = logging.FileHandler("app.log")
error_handler.setLevel(logging.ERROR)
info_handler = logging.FileHandler(log_file)
info_handler.setLevel(logging.INFO)

logger.setLevel(logging.INFO)
logger.addHandler(info_handler)
logger.addHandler(error_handler)

header_formatter = logging.Fomatter('%(message)s')
default_formatter = logging.Formatter('%(asctime)s -  %(name)s  -  %(levelname)s - %(message)s')

error_handler.setFormatter(header_formatter)
info_handler.setFormatter(header_formatter)

logger.error("DATE\t\tTIME\t\tNAME\t\tUSER\t\tTICKET NO\tMESSAGE")

error_handler.setFormatter(default_formatter)
info_handler.setFormatter(default_formatter )

一些解释:

  • 我们正在使用两个处理程序:error_handlerinfo_handler将不同类型的消息定向到不同的文件。 注意,这样,错误消息也将出现在信息文件中。
  • 我们将logger的级别设置为最小(在这种情况下为INFO),然后将其添加到处理程序中。
  • 然后,我们在标题和常规消息中使用特殊的formatter。我们首先为两个处理程序分配头格式器。然后,我们打印标题(使用logger.error,因此它将同时进入两个日志)。然后使用常规格式化程序设置处理程序。
  • 此后记录的所有消息将采用常规格式。

第二个注意:由于您尝试达到ticket_no,我无法找到一种向字段添加字段的方法。如您所见,我将列移到了消息之前,因此只需在消息的开头添加ticke_no。例如,您可以做的事情:

def log_msg(logger, type_of_message, msg, ticket_no):
    msg = "{}\t{}".format(ticket_no, msg)
    if(type_of_message == 'INFO' or 'Info'):
        logger.info(msg)
    elif(type_of_message == 'ERROR' or 'Error'): 
        logger.error(msg)