이 저장소는 공개(public) 저장소입니다.
민감한 정보가 유출되지 않도록 주의 바랍니다.
django.db.connect
의 cursor
를 통해 데이터베이스 서버에 전달되는 SQL Query를 로깅합니다.
django.db.connect
을 통해 전달되는 쿼리 로깅sql
파라미터가 분리된 쿼리문
params
sql
에 바인딩될 파라미터
many
여러 개의 Query 구문인지의 여부
alias
settings.DATABASES의 키 값으로써 쿼리가 실행된 DB 식별자
duration
쿼리 수행에 소요된 시간
configuration
사용된 설정값 식별자 ex) web, api 등 conf/settings/env.py 참조
traceback
쿼리 수행 지점까지의 프로그램 콜스택
traceback_hash
traceback
의 MD5 해시값
pip install git+https://github.com/kncray/django-sqllog.git@latest
github 보안 정책에 따라 비밀번호를 이용할 수 없는 경우,
pip install git+https://{YOUR-TOKEN}@github.com/kncray/django-sqllog.git@latest
pip install git+ssh://git@github.com/kncray/django-sqllog.git@latest
settings.INSTALLED_APPS
수정INSTALLED_APPS += [
'sqllog',
]
settings.SQLLOG
생성SQLLOG = {
'ENABLED': os.getenv('SQLLOG_ENABLED', True),
'ENABLE_SENTRY': os.getenv('SQLLOG_ENABLE_SENTRY', False),
'CONFIG_NAME': 'testing',
'ENV_FILE_PATH': f'{BASE_DIR}/runtime/sqllog.ini',
'LOGGING': {
'formatters': {
'sqllog': {
'format': '%(levelname)s %(asctime)s %(message)s',
},
},
'handlers': {
'sqllog': {
'class': 'logging.FileHandler',
'filename': f'{LOG_ROOT}/sql.log',
'formatter': 'sqllog',
},
},
'loggers': {
'sqllog': {
'handlers': ['sqllog'],
'level': 'INFO',
'propagate': False,
},
}
}
}
설정 파일(settings.SQLLOG['ENV_FILE_PATH']
)이 없을 경우 새로 생성 및 비활성화
설정 파일이 없을 경우 로깅 비활성화
설정 파일을 삭제할 경우 로깅 비활성화
설정 파일이 포함된 디렉토리를 삭제할 경우 로깅 비활성화
설정 파일의 내용이 올바르지 않을 경우 로깅 비활성화
프로그램 재시작/재배포 시 설정 파일이 존재하고 활성화로 설정된 경우 로깅 활성화
설정 파일 형식
[default]
enabled=True
sample_rate=1
max_traceback_strlen=100
max_query_length=10000
long_query_time=1
long_query_length=10000
max_traceback_strlen
기본값은 None
입니다(Key/Value가 존재하지 않거나 max_traceback_strlen=
와 같이 설정).
traceback 필드의 최대 문자 수를 결정합니다.
max_query_length
기본값은 10000입니다. sql 필드의 최대 문자 수를 결정합니다.
값을 지정하지 않을 경우(No Value) 쿼리문 전체가 저장됩니다.
long_query_time
단위는 초(sec)이고 기본값은 1입니다.
값을 지정할 경우 해당 시간 이상으로 걸린 쿼리만 저장됩니다.
long_query_length
기본값은 10000입니다.
값을 지정할 경우 해당 길이 이상의 쿼리만 저장됩니다.
단, INSERT, UPDATE 명령은 제외합니다.
Logstash로 직접 로깅할 경우 아래와 같이 설정합니다.
SQLLOG = {
'ENABLED': os.getenv('SQLLOG_ENABLED', True),
'ENABLE_SENTRY': os.getenv('SQLLOG_ENABLE_SENTRY', False),
'CONFIG_NAME': 'testing',
'ENV_FILE_PATH': f'{BASE_DIR}/runtime/sqllog.ini',
'LOGGING': {
'formatters': {
'sqllog': {
'format': '%(levelname)s %(asctime)s %(message)s',
},
},
'handlers': {
'sqllog': {
'class': 'logstash.LogstashHandler',
'host': 'localhost',
'port': 5959,
},
},
'loggers': {
'sqllog': {
'handlers': ['sqllog'],
'level': 'INFO',
'propagate': False,
},
}
}
}
logstash.LogstashHandler
는 logstash.UDPLogstashHandler
와 동일합니다.
logstash.TCPLogstashHandler
로 변경할 수 있습니다
(참고).