![](/img/trans.png)
[英]Filehandler and consolehandler aren't working properly with logging config
[英]Django Logging with FileHandler not Working
我正在使用django項目下面的日志設置(也使用sentry / raven)。 哨兵/烏鴉位工作正常,但文件記錄不是。 創建一個空日志文件,但每當我使用logging.info('foo')
時,日志文件中都沒有出現任何內容(即它保持為空)。 有什么建議?
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'root': {
'level': 'WARNING',
'handlers': ['sentry'],
},
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
},
},
'handlers': {
'sentry': {
'level': 'ERROR',
'class': 'raven.contrib.django.handlers.SentryHandler',
},
'file': {
'level': 'INFO',
'class': 'logging.FileHandler',
'filename': '/var/log/django/breeding.log',
},
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'verbose'
}
},
'loggers': {
'django.db.backends': {
'level': 'ERROR',
'handlers': ['console'],
'propagate': False,
},
'raven': {
'level': 'DEBUG',
'handlers': ['console'],
'propagate': False,
},
'sentry.errors': {
'level': 'DEBUG',
'handlers': ['console'],
'propagate': False,
},
},
}
我遇到了同樣的問題。 結果證明是權限問題。 在配置日志記錄后第一次運行開發服務器時,它使用模式644創建了本地用戶(stretch)擁有的文件/var/log/django/request.log
。
當我啟動“生產”服務器(nginx / uwsgi)時,該服務將作為www-data用戶運行,並且無法打開/var/log/django/request.log
進行寫入。 簡單地刪除日志文件並重新啟動uwsgi就足以讓它繼續下去,但我必須提出一個更優雅的長期修復方法。
為了使其工作,您必須為每個記錄器添加“ 文件 ”處理程序,如下所示:
'loggers': {
'django.db.backends': {
'level': 'ERROR',
'handlers': ['file','console'],
'propagate': False,
},
'raven': {
'level': 'DEBUG',
'handlers': ['file','console'],
'propagate': False,
},
'sentry.errors': {
'level': 'DEBUG',
'handlers': ['file','console'],
'propagate': False,
},
},
否則,記錄器不會向指定文件寫入任何內容。
在Django日志記錄設置中,請遵循以下腳本:
LOGGING = {
'version': 1,
'disable_existing_loggers': True,
'formatters': {
'verbose': {
'format': '%(levelname)3.3s %(asctime)22.22s [%(name)s:%(funcName)s] {%(process)d} %(message)s'
}
},
'handlers': {
'sentry-warn': {
'level': 'WARNING',
'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
},
'sentry-info': {
'level': 'INFO',
'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
},
'sentry-error': {
'level': 'ERROR',
'class': 'raven.contrib.django.raven_compat.handlers.SentryHandler',
},
'console': {
'level': 'WARNING',
'class': 'logging.StreamHandler',
'formatter': 'verbose'
},
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler',
}
},
'loggers': {
'sentry': {
'level': 'DEBUG',
'handlers': ['sentry-warn', 'console', 'file', 'sentry-info', 'sentry-error'],
'propagate': False,
},
'sentry-warn': {
'level': 'DEBUG',
'handlers': ['sentry-warn', 'console', 'file'],
'propagate': False,
},
'sentry-error': {
'level': 'DEBUG',
'handlers': ['console', 'file', 'sentry-error'],
'propagate': False,
},
'sentry-info': {
'level': 'DEBUG',
'handlers': ['console', 'file', 'sentry-info'],
'propagate': False,
},
'django': {
'handlers': ['console', 'file', 'mail_admins'],
'propagate': False,
},
},
'root': {
'handlers': ['console', 'file', 'mail_admins'],
'level': 'INFO'
},
}
from logging import getLogger
logger = getLogger('sentry')
log_war = getLogger('sentry-warn')
log_inf = getLogger('sentry-info')
log_err = getLogger('sentry-error')
logger.warning('warn')
logger.info('info')
logger.error('error')
log_err.error('new error')
log_war.warning('new warn')
log_inf.info('new info')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.