我想编写一个使用Python日志记录的Python类。这个Python类将负责在init函数中创建具有给定名称的文件。
我想在两个或多个类中创建上述类的对象,并期望生成两个或多个文件。
我试过编写这个类,但无法创建多个文件。
有人能指导我怎么做吗?
我创建了以下类:
class Logger:
def __init__(self, log_filename = "test.log"):
if not os.path.exists("LogFiles"):
os.makedirs("LogFiles")
self.Logger = logging.getLogger("main")
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s : %(message)s',
filename= log_filename,
filemode='w') # change filemode to 'w' to overwrite file on each run
consoleHandler = logging.StreamHandler()
consoleHandler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(message)s')
consoleHandler.setFormatter(formatter)
logging.getLogger('').addHandler(consoleHandler) # Add to the root logger
self.Logger.info("Starting new logging sessions")
def writeToFile(self, line):
if self.Logger.propagate == True:
self.Logger.debug(line)
def closeFile(self):
if self.Logger.propagate == True:
self.Logger.propagate = False
使用dictConfig更好地处理这个问题。然后可以指定记录到两个独立的文件。我只在发出API post时使用第二个日志记录器,以便将外部数据记录到第二个日志中。
听起来你的类的内部可能应该有一个^{} ,而你需要在} 。您可能想考虑使用一个工厂方法来创建
Logger
中添加一个^{Logger
s并添加处理程序,而不是实现您自己的类。您可能需要创建保存日志文件的目录。有关创建目录的建议,请参见this answer。编辑:
我认为您不需要编写自己的
Logger
类。Python的logging
模块拥有您需要的所有部分。你可能只需要一个工厂方法。实现的关键是需要创建两个独立的、完全独立的日志对象。您可以使用logging.getLogger
来执行此操作,并且每当您传递一个不同的名称时,它都会为您提供一个不同的记录器。你可以用任何你想用的名字来记录日志。当然,你要远离basicConfig
你正在做的事情。它被设计成一些简单的东西,适合那些只想不做任何特别的事情的人。我想这说明了你想要的功能。关键是用不同的处理程序创建两个不同的记录器。然后分别使用。请记住,我对
logging.getLogger
的第二个调用并没有创建新的记录器;它得到了我们最初在setup_logger
中设置的记录器。对数检验:
样本运行:
日志1.log:
日志2.log:
相关问题 更多 >
编程相关推荐