记录模块将所有未发送的消息发送到另一个文件(Python)

问题描述 投票:0回答:1

我试图将消息记录到日志文件,然后关闭日志记录并将所有剩余的消息发送到新的日志文件。

但是,我观察到消息只发送到以前创建的日志文件。我怎样才能解决这个问题?

以下是我的代码:

logger_name = 'create_request'
request_Create_log = Code_vars.Requests_path+'Request_creation.log'
formatter = "%(asctime)s %(levelname)s %(message)s"
logging.basicConfig(filename=request_Create_log,filemode='a',level=logging.DEBUG,format=formatter)
req_logger = logging.getLogger(logger_name)
logging.shutdown()
#new logfile creation
logger_name = 'request_'+str(req_id)
formatter = "%(asctime)s %(levelname)s %(message)s"
logging.basicConfig(filename=log_file,filemode='a',level=logging.DEBUG,format=formatter)
logger = logging.getLogger(logger_name)
python-3.x logging
1个回答
0
投票

来自logging.shutdown()文档:

通过刷新和关闭所有处理程序,通知日志记录系统执行有序关闭。这应该在应用程序出口处调用,并且在此调用之后不应再使用日志记录系统。

首先,如果您只是想切换处理程序/配置,那么您使用它是错误的 - 它并非用于此目的。其次,注意它说关闭处理程序,它不会删除它们,所以它们仍然在系统中。你可能想要的是清理旧的处理程序:

logger = logging.getLogger()  # get the root logger
handlers = logger.handlers[:]  # make a copy of the current handlers
for handler in handlers:  # go through all available handlers and...
    logger.removeHandler(handler)  # remove them

然后重建您的记录器以执行您想要的操作。

© www.soinside.com 2019 - 2024. All rights reserved.