我有一段Python代碼,如果發生IOError異常,應該向我的Django日誌文件寫入錯誤消息和關聯的堆棧跟蹤。但我發現,錯誤和堆棧跟蹤寫入我的控制檯,但不是我的日誌文件。我檢查了我的Django日誌配置並沒有看到問題。我有LOG_LEVEL設置爲DEBUG,我有一個「日誌文件」處理程序。有沒有人看到我在做什麼錯了?爲什麼Python Python logging.exception不工作?
謝謝!
# photo.py
import os
import logging
logger = logging.getLogger(__name__)
import shutil
pvt_photo_path = "/www/proj/pvt/photo1.jpg"
pub_photo_path = "/www/proj/pub/photo1.jpg"
try:
shutil.move(pvt_photo_path, pub_photo_path)
except IOError as e:
logging.exception("Couldn't move photo %s" % pvt_photo_path)
# settings.py
LOG_LEVEL = 'DEBUG'
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'standard': {
'format' : "[%(asctime)s] %(levelname)s [%(name)s:%(lineno)s] %(message)s",
'datefmt' : "%d/%b/%Y %H:%M:%S"
},
},
'handlers': {
'null': {
'level':'DEBUG',
'class':'django.utils.log.NullHandler',
},
'logfile': {
'level':LOG_LEVEL,
'class':'logging.handlers.RotatingFileHandler',
'filename': '/var/log/proj/proj.log',
'maxBytes': 50000,
'backupCount': 2,
'formatter': 'standard',
},
'database_logfile': {
'level':LOG_LEVEL,
'class':'logging.handlers.RotatingFileHandler',
'filename': '/var/log/proj/database.log',
'maxBytes': 50000,
'backupCount': 2,
'formatter': 'standard',
},
'console':{
'level':LOG_LEVEL,
'class':'logging.StreamHandler',
'formatter': 'standard'
},
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler'
},
},
'loggers': {
'django': {
'handlers':['logfile', 'database_logfile', 'console', 'mail_admins'],
'propagate': True,
'level':'DEBUG',
},
'django.request': {
'handlers': ['logfile', 'mail_admins'],
'level': 'ERROR',
'propagate': False,
},
'django.db.backends': {
'handlers': ['database_logfile'],
'level': 'DEBUG',
# Logging messages are not passed to the handlers of ancestor loggers.
'propagate': False,
},
'': {
'handlers': ['console'],
'level': 'DEBUG',
},
}
}
root: ERROR: Couldn't move photo for user "test_user"
Traceback (most recent call last):
File "/www/proj/classes/photo.py", line 1167, in make_photo_public
shutil.move(pvt_gall_photo_path, pub_gall_photo_path)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 301, in move
copy2(src, real_dst)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 130, in copy2
copyfile(src, dst)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 82, in copyfile
with open(src, 'rb') as fsrc:
IOError: [Errno 2] No such file or directory: '/www/proj/pvt/photo1.jpg'
--------------------- >> end captured logging << ---------------------
你可以顯示堆棧跟蹤嗎?哪個模塊是引發異常的代碼? –
我已經添加了堆棧跟蹤。 – William
從你顯示的內容來看,引發異常的代碼在* import time *處被調用 - 這可能會在* Django被初始化並且日誌被配置之前被調用。雖然你說它實際上是從一個方法中調用的,但錯誤消息不使用配置格式的事實告訴我,在* logging配置之前,異常正在被*命中。 –