Django에서 Logging 로그 구성
import time
LOGGING_DIR = os.path.join(BASE_DIR, "logs") # LOGGING_DIR
if not os.path.exists(LOGGING_DIR):
os.mkdir(LOGGING_DIR)
LOGGING = {
'version': 1,
'disable_existing_loggers': True, # log,
'formatters': { #
'standard': {
'format': '[%(asctime)s] [%(filename)s:%(lineno)d] [%(module)s:%(funcName)s] '
'[%(levelname)s]- %(message)s'},
'simple': { #
'format': '%(levelname)s %(message)s'
},
},
'filters': { #
},
#
'handlers': {
#
'default': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(LOGGING_DIR, 'all-{}.log'.format(time.strftime('%Y-%m-%d'))),
'maxBytes': 1024 * 1024 * 5, #
'backupCount': 5, #
'formatter': 'standard', #
'encoding': 'utf-8', #
},
#
'error': {
'level': 'ERROR',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(LOGGING_DIR, 'error-{}.log'.format(time.strftime('%Y-%m-%d'))),
'maxBytes': 1024 * 1024 * 5, #
'backupCount': 5, #
'formatter': 'standard', #
'encoding': 'utf-8', #
},
#
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
'formatter': 'standard'
},
# info
'info': {
'level': 'INFO',
'class': 'logging.handlers.RotatingFileHandler',
'filename': os.path.join(LOGGING_DIR, 'info-{}.log'.format(time.strftime('%Y-%m-%d'))),
'maxBytes': 1024 * 1024 * 5,
'backupCount': 5,
'formatter': 'standard',
'encoding': 'utf-8', #
},
},
# handlers
'loggers': {
# django ,
'django': {
'handlers': ['default', 'console'],
'level': 'INFO',
'propagate': False
},
# log
'log': {
'handlers': ['error', 'info', 'console', 'default'],
'level': 'INFO',
'propagate': True
},
}
}
에 대한 주석이 상세하기 때문에 더 이상 소개하지 않겠습니다.import logging
logger = logging.getLogger('log')
...
logger.info(' ! response_code:{};response_headers:{};response_body:{}'.format(response_code, response_headers, response_body[:251]))
logger.error(' :{}'.format(error))
LOGGING_CONFIG=None, 。
Django 자체 레코더
django , django , :
- django.request
5XX error ,4XX warning , :
status_code:HTTP
request: request
- django.db.backends
sql debug , :
duration:sql
sql: sql
params:sql
, settings.DEBUG=True , , 。
Django 자체 필터
from django.http import UnreadablePostError
def skip_unreadable_post(record):
if record.exc_info:
exc_type, exc_value = record.exc_info[:2]
if isinstance(exc_value, UnreadablePostError):
return False
return True
'filters': {
'skip_unreadable_posts': {
'()': 'django.utils.log.CallbackFilter',
'callback': skip_unreadable_post,
}
},
'handlers': {
'mail_admins': {
'level': 'ERROR',
'filters': ['skip_unreadable_posts'],
'class': 'django.utils.log.AdminEmailHandler'
}
},
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.