이 저장소는 공개(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://[email protected]/kncray/django-sqllog.git@latest
INSTALLED_APPS += [
'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
로 변경할 수 있습니다 (참고).