[英]How to log Python warnings in a Django log file?
我有一個Django應用程序,我將從v1.8遷移到v1.10。 在完成這項工作的過程中,我通過以下方式運行我的應用程序:
python -Wall manage.py runserver
這樣做會導致許多Python警告出現在我的控制台中。 我想在我的Django應用程序日志中顯示這些警告,以便稍后檢查它們。 我以為我的應用程序的日志處理程序會捕獲這些警告,但事實並非如此。 日志處理程序如下所示(從settings.py中獲取):
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
'datefmt': "%d/%b/%Y %H:%M:%S"
},
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'handlers': {
'file': {
'level': 'WARNING',
'class': 'logging.FileHandler',
'filename': 'myapp.log',
'formatter': 'verbose'
},
},
'loggers': {
'django': {
'handlers': ['file'],
'propagate': True,
'level': 'WARNING',
},
'myapp': {
'handlers': ['file'],
'level': 'WARNING',
},
}
}
如何在我的Django日志中捕獲Python警告(使用-Wall
)以供日后檢查?
python -Wall manage.py <command>
中顯示的警告是使用警告模塊生成的。 在Python2.7日志記錄模塊文檔中,它們有一節顯示如何將警告模塊中的消息集成到日志記錄中。
將這些添加到您的設置文件中。
import logging
logging.captureWarnings(True)
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'verbose': {
'format': "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
'datefmt': "%d/%b/%Y %H:%M:%S"
},
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'handlers': {
'file': {
'level': 'WARNING',
'class': 'logging.FileHandler',
'filename': 'myapp.log',
'formatter': 'verbose'
},
},
'loggers': {
'django': {
'handlers': ['file'],
'propagate': True,
'level': 'WARNING',
},
'myapp': {
'handlers': ['file'],
'level': 'WARNING',
},
'py.warnings': {
'handlers': ['file'],
'level': 'WARNING',
'propagate': True
}
}
}
添加后,嘗試運行任何manage.py
命令,您可以看到寫入myapp.log
文件的警告。
該行指示日志記錄捕獲py.warnings 警告 :
logging.captureWarnings(True)
這指示日志記錄從py.warnings記錄器路由(在此示例中為文件處理程序)警告:
'py.warnings': {
'handlers': ['file'],
'level': 'WARNING',
'propagate': True
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.