2016-11-30 75 views
1

我想讓我的Django應用程序工作的記錄器。我打電話給記錄器:Django記錄器創建文件,但不寫入它

logger = logging.getLogger(__name__) 
logger.info("some stuff") 

裏面的一個函數在我的views.py中。

但它不工作,這是應該包含在創建日誌,但沒有數據被寫入其中的文件,這裏是設置:

LOGGING = { 
'version': 1, 
'disable_existing_loggers': False, 
'formatters':{ 
    'standard': { 
     'format': '%(asctime)s [%(levelname)s] %(name)s: %(message)s' 
    }, 
}, 
'handlers': { 
    'file_INFO': { 
     'level': 'INFO', 
     'class': 'logging.handlers.RotatingFileHandler', 
     'filename': os.path.join(BASE_DIR, 'logs/site.logs'), 
     'maxBytes': 1024 * 1024 * 15, # 15MB 
     'backupCount': 10, 
     'formatter': 'standard', 
    }, 
    'console_INFO': { 
     'level': 'INFO', 
     'class': 'logging.StreamHandler', 
    } 
}, 
'loggers': { 
    'INFO': { 
     'handlers': ['file_INFO', ], 
     'level': 'INFO', 
     'propagate': True, 
    }, 
}, 

}

任何想法?

謝謝!

回答

1

您已將您的記錄器命名爲'INFO',但您要求輸入記錄器__name__。所以你使用的記錄器不是你想要的。

最好的辦法是用根記錄器,像這樣:

LOGGING = { 
    ... 
    'root': { 
     'handlers': ['file_INFO', ], 
     'level': 'INFO', 
    }, 
} 

的所有記錄將傳播至根記錄器(除非特別指出),這個設置是足夠的應用程序超過90% 。如果你使用根記錄器,你也不需要運行getLogger(__name__),你可以簡單地使用logging.info("some stuff")登錄。

+0

我添加了對記錄器工作方式的誤解。我認爲「__name__」是記錄器實例的名稱,我在記錄器設置中定義的是記錄器可以根據例如日誌記錄票據的級別或名稱它已發送的模塊。 – Nicolas