【问题标题】:Logger module in python does not create multiple filespython中的记录器模块不会创建多个文件
【发布时间】:2019-11-24 21:17:30
【问题描述】:

我在创建对象期间根据对象唯一标签创建具有唯一名称的记录器。我想要不同对象的不同日志文件。它只创建一个文件并将所有日志附加到它

我创建了 5 个班级学生实例,其标签从 1 到 6 递增 在构造函数(init)中,我通过将标签附加到它来创建一个具有唯一名称的记录器对象。运行后只创建一个文件,而不是预期的 5 个单独的文件

#python2.7
import logging
class student:
    def __init__(self,label):
        self.label = label
        file_name ="Log_Rollno" + str(self.label)
        logging.basicConfig(filename=file_name,format='%(asctime)s %(message)s',filemode='w')
        print "CREATED " + file_name
        self.logger = logging.getLogger()
        self.logger.setLevel(logging.DEBUG)
        self.logger.info("Message from Object" + str(self.label))

if __name__ == "__main__":
    for i in range(1,6):
        student_obj = student(i)

我希望:根据对象唯一标签(Log_Rollno1、Log_Rollno2)的单个文件

实际结果:来自所有已创建对象的消息仅附加到一个文件中

(文件名:Log_Rollno1) 2019-07-16 12:52:49,884 来自 Object1 的消息 2019-07-16 12:52:49,890 来自 Object2 的消息 2019-07-16 12:52:49,894 来自 Object3 的消息 2019-07-16 12:52:49,898 来自 Object4 的消息 2019-07-16 12:52:49,904 来自 Object5 的消息

【问题讨论】:

  • 我认为这是因为您将基本日志记录设置为文件名 logging.basicConfig(filename=file_name,format='%(asctime)s %(message)s',filemode='w' ) 当然,这应该在您生成的每个记录器的配置中。
  • 这是您要找的吗? stackoverflow.com/questions/11232230/…

标签: python class logging


【解决方案1】:

您只能使用一次logging.basicConfig()。它配置root 记录器,如果已经附加了一个处理程序,它将静默返回而不做任何事情。

documentation 声明:

如果根记录器已经为其配置了处理程序,则此函数不执行任何操作。

在您的情况下,第一个实例将配置记录器。以后创建的实例不会。

您可能希望通过将Handler 附加到它而不是使用logging.basicConfig() 来手动配置记录器。

Example in the docs showing how to attach a handler.

【讨论】:

    猜你喜欢
    • 2020-06-19
    • 2013-07-16
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多