在开始编写脚本时,我没有考虑日志模块,所以我只是简单地编写如下代码:
LogMethod(LogFileName, LogMessage):
LogRlock.acquire()
LogFile = open(LogFileName, "a")
LogFile.write(LogMessage)
LogFile.close()
LogRlock.release()
但现在由于日志模块在日志文件大小/格式控制等方面可以做得更好,所以我打算重写上面的方法。好吧,我想对这个方法做一个简单的修改,假设我要这样写:
^{pr2}$Python文档说日志模块是线程安全的,所以我想我其实并不需要LogRlock,对吧?还有一个问题,我需要在上述方法的末尾销毁实例吗?如果是,我该怎么做?这是使用日志模块的安全方法吗?在
非常感谢
使用记录器和定义其属性是两个不同的任务,为了将业务逻辑与配置逻辑分开,应该将它们分开。在
通常,在应用程序中,您可以根据记录器的名称将其作为目标。因此,基本上,您需要记录的就是这样一种方法:
可以按如下方式单独定义记录器属性:
^{pr2}$另一个替代上述“手动”日志配置的方法是使用logging configuration file或使用configuration dictionary。在
Python开发人员不必关心销毁对象,这是由Python的垃圾回收器完成的。如果日志记录。记录器类这甚至是显式销毁记录器的错误:日志记录模块存储记录器实例,以便在每次调用时返回相同的实例日志记录.getLogger(如果提供了相同的记录器名称)(方法日志记录.getLogger(“Demo”)在第一次调用时创建一个新实例) 在您的例子中,这意味着RotatingFileHandler被添加了第二个、第三个、第四个。。。每次调用logMethod时都有时间记录日志。。。在
Python惯例和函数:以小写字母开头的函数
正确,不需要锁来保护日志代码。在
不,你没有。实际上,在Python中不能销毁对象。当没有对它们的引用时,它们将被自动垃圾回收。在
但是,除此之外,
Logger
对象将在程序的生命周期内持续存在。即使您可以在日志记录功能结束时销毁它,也不应该这样做不,不是。正如在注释中所指出的,您正在日志记录方法中对记录器执行设置操作(如添加处理程序和格式化程序),而您应该在程序开始时只执行一次。现在的做法是,每次记录消息时,都会添加一个处理程序,并且每个处理程序都会打印出它接收到的每条消息,因此,您会发现,您记录的第一条消息打印一次,第二条消息打印两次,第三条消息打印三次,等等,直到您用不必要的副本淹没日志文件为止你的日志消息。在
我建议使用某种设置函数,在程序开始时调用一次来配置日志记录行为。关于设置记录器级别、添加处理程序和添加格式化程序的所有内容都在其中。然后,在使用日志代码的每个模块(
.py
文件)中,在模块级别,您可以获得适当的记录器并将其存储在模块级变量中:或者,如果您在模块中使用多个记录器,请对每个记录器执行此操作。在每个需要记录消息的函数中,您可以
^{pr2}$对
logger.info
的调用将替换您自己的LogMethod
。在相关问题 更多 >
编程相关推荐