2013-04-27 36 views
1

我想配置一个Django应用程序的日志记录,以便Django的ORM生成的所有SQL都记录到sql.log,并且由Django记录的所有其他日志消息都记录到另一个文件。 setup.py我的日志部分看起来是这样的:配置Django日志记录 - SQL和其他消息

'version': 1, 
'disable_existing_loggers': False, 
'formatters': ... 
'handlers': { 
    'logfile' : { 
     'class': 'logging.handlers.WatchedFileHandler', 
     'filename': '.../django.log', 
    'formatter': 'verbose', 
    }, 
'sqlfile': { 
    'class': 'logging.handlers.WatchedFileHandler', 
     'filename': '.../sql.log', 
     'formatter': 'simple', 
    }, 
'apache_log': { 
    'class': 'logging.StreamHandler', 
    'level': 'ERROR', 
    'formatter': 'verbose', 
} 
}, 
'loggers': { 
'django': { 
    'handlers': ['logfile', 'apache_log'], 
    'propagate': True, 
    'level': 'INFO', 
}, 
'django.db': { 
    'handlers': ['sqlfile'], 
    'propagate': True, 
     'level': 'DEBUG', 
}, 
} 

SQL确实越来越记录到sql.log,但它也越来越记录到django.log,虽然我专门设置的“Django的记录器中的记录水平到INFO。

我错过了什么?

+1

也许设置''传播':假''django.db''会有帮助吗? – stalk 2013-04-27 19:50:19

+0

但我希望从django.db获取INFO消息以及来自所有其他django记录器的INFO消息。 – zmbq 2013-04-27 19:53:41

回答

1

我认为stalk是正确的。记录到django.db的事件被传递给附加到django.db记录器的处理程序,但也将传递给处理程序的django和根记录器,除非propagate设置为django.db记录器的False。请参阅this diagram了解记录器和处理程序的工作方式。

propagate设置为False,记录到django.db的事件将仅传递给sqlfile处理程序。