我已经为我的django网站实现了我自己的自定义Logger:
class SpecialLogger(logging.Logger):
def __init__(self, name, level=logging.DEBUG):
logging.Logger.__init__(self, name, level)
def special(self, msg, *args, **kwargs):
self.log(self.level, msg, *args, **kwargs)
在我的wsgi文件中,我添加了以下行:
import logging
from testbed.utils import SpecialLogger
logging.setLoggerClass(SpecialLogger)
在我的django观点中:
1 import logging
2 logger = logging.getLogger('mylog')
3 print str(logging.getLoggerClass())
4 print str(logger)
5 print dir(logger)
第3行打印testbed.utils.SpecialLogger
第4行打印<logging.Logger instance at 0x21aadcac>
Line#5(当然)没有显示我的函数special
我做错了什么?为什么第3行和第3行之间存在差异? 4?
答案 0 :(得分:0)
setLoggerClass函数设置用于在调用返回后实例化的所有记录器的类,但在调用之前创建的任何记录器仍将是logging.Logger。您可以在wsgi文件中附加一行以确认正在使用正确的类,例如
import logging
from testbed.utils import SpecialLogger
logging.setLoggerClass(SpecialLogger)
logger = logging.getLogger('mylog') # should be a testbed.utils.SpecialLogger
如果这不会产生预期效果,则在上述代码运行之前,其他一些代码(例如settings.py
)必须实例化记录器。