如何在Python日志文件中编写头部

2024-05-07 06:37:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我做了一个日志文件。现在我想在日志文件中打印一个标题。这样我们就可以确定这个列是用来做什么的。在

我已经提供了我编写的代码。在

def logger(type_of_message, msg, ticket_no):   #This will create records/log in app.log file. And can be used for debuging too. 
    log_file = str(datetime.utcnow().strftime('%d_%m_%Y')) + '.log'
    if(type_of_message == 'INFO' or 'Info'):
        logger = logging.LoggerAdapter(logging.getLogger(__name__), {'ticket_no': '%s' % (ticket_no)})
        logging.basicConfig(filename = log_file, filemode = 'a', level = logging.INFO, format =  '%(ticket_no)s -  %(asctime)s -  %(name)s  -  %(levelname)s - %(message)s')    
        logger.info(msg)
    elif(type_of_message == 'ERROR' or 'Error'): 
        logger = logging.LoggerAdapter(logging.getLogger(__name__), {'ticket_no': '%s'%(ticket_no)}) 
        logging.basicConfig(filename = 'app.log', filemode = 'a', level = logging.ERROR,  format  = '%(ticket_no)s - %(asctime)s -  %(name)s  -  %(levelname)s - %(message)s')
        logger.info(msg) 

我想这样打印:

^{pr2}$

Tags: or文件ofnonameinfologapp
1条回答
网友
1楼 · 发布于 2024-05-07 06:37:16

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

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

另外,通过定义自己的检查消息类型的函数,您可能会失去logging能力。调用logger.info获取错误消息看起来很有趣。您应该使用Handlers,查看以下代码:

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将不同类型的消息定向到不同的文件。注意这样,错误消息也会出现在info文件中。在
  • 我们将logger的级别设置为它们之间的最小值(在本例中是INFO),并添加我们的处理程序。在
  • 然后我们将特殊的formatters用于头和常规消息。我们首先将头格式化程序分配给两个处理程序。然后我们打印头(使用logger.error,这样它就可以进入两个日志)。然后用常规格式化程序设置处理程序。在
  • 从此点开始记录的所有消息都将采用常规格式。在

第二个注意:我找不到一种方法来将字段添加到fomat中,就像您试图实现的ticket_no。如您所见,我将列移到消息之前,所以只需在消息的开头添加ticke_no。例如,您可以做的是:

^{pr2}$

相关问题 更多 >