我有一个格式化程序,它期望记录中有一个特殊的属性“user_id”,但并不总是存在(有时我使用特殊的logging.Filter将其添加到记录中)。 我尝试重写logging.Logger的makeRecord方法,如下所示:
import logging
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)-15s user_id=%(user_id)s %(filename)s:%(lineno)-15s: %(message)s')
class OneTestLogger(logging.Logger):
def makeRecord(self, name, level, fn, lno, msg, args, exc_info, func=None, extra=None):
rv = logging.Logger.makeRecord(self, name, level, fn, lno,
msg, args, exc_info,
func, extra)
rv.__dict__.setdefault('user_id', 'master')
return rv
if __name__ == '__main__':
logger = OneTestLogger('main')
print logger
logger.info('Starting test')
但似乎这不起作用,我一直得到以下错误:
<main.MyLogger instance at 0x7f31a6a5b638>
找不到记录器“main”的处理程序。
我做错了什么? 谢谢。