2013-04-27 45 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處理程序。