【发布时间】:2011-07-16 11:29:02
【问题描述】:
我在我的 django 应用程序中使用 python 日志记录。如果需要,连接到后端 api 的类会使用文件处理程序初始化此记录器。每次进行 api 调用时都会实例化该类。我已经尝试确保不会每次都添加额外的处理程序,但是
lsof | grep my.log
在我的日志文件中显示越来越多的处理程序,一段时间后我的服务器由于此打开文件限制而失败。
self.logger = logging.getLogger("FPA")
try:
if self.logger.handlers[0].__class__.__name__=="FileHandler":
pass
except Exception, e:
print 'new filehandler added'+str(e)
ch = logging.FileHandler(FPA_LOG_TARGET)
formatter = logging.Formatter("%(asctime)s - %(levelname)s - %(message)s - %(pathname)s @ line %(lineno)d")
ch.setFormatter(formatter)
self.logger.setLevel(logging.DEBUG)
self.logger.addHandler(ch)
我意识到这可能不是最好的方法,但到目前为止我还没有在我的实现中发现错误。
【问题讨论】:
-
你的问题到底是什么?
-
print 'new filehandler added'+str(e)在您的日志语句中打印出什么内容? -
我的问题是我做错了什么?
-
print 'new filehandler added'+str(e) 表示索引超出范围,所以即使我已经初始化了记录器,我的类的下一个实例也不会看到任何处理程序。
-
您需要为此提供更多上下文。它看起来完全像错误的方法,但我们不知道这发生在您的代码中的哪个位置?视图功能?设置.py?网址.py?此外,您为什么不断添加新的文件处理程序?为什么不在 logging.ini 文件中声明一次?
标签: python django logging filehandler