로그
개요
DRX의 로그는 동일한 로그를 다음의 두 경로로 출력한다.
표준 출력
로그 파일
표준 출력의 경우 서비스 상태로 동작시에는 출력되지 않고, 파일 출력의 경우는 메인 로그와 리소스 로그로 분산 저장된다.
파일 | 저장 위치 | 내용 |
|---|---|---|
메인 로그 파일 | {DRX 설치 경로}/logs/main.log | DRX 자체 동작. 리소스별 동작 내용 제외 |
리소스별 로그 파일 | {DRX 설치 경로}/logs/리소스명/리소스명.log | 리소스의 동작 내용 |
각각의 파일은 설정된 크기에 도달하면 파일을 보관 처리하고 새로 생성한다.
각각의 파일은 파일 크기 제한 설정값에 따라 날짜와 시간이 포함된 파일 파일로 분기된다. (예: main_2018-11-22_1432.log)
로그 조회
서비스로 동작중인 DRX 로그를 실시간으로 출력하기 위해 다음과 같은 형태의 명령이 제공된다.
drx-ctl log {options} [resource or all]
지원되는 옵션:
옵션 | 단축옵션 | 설명 |
|---|---|---|
--include-main | -m | 메인 로그를 출력한다. 이 옵션을 지정하지 않으면 리소스별 로그만 출력된다. |
--lines {값} | -n {값} | 최초 시작시 가장 최근의 로그에서 지정한 라인 수 만큼 출력한다. |
이 명령을 실행하면 지속적으로 로그 파일의 갱신 내용을 출력하고, Ctrl-C를 통해 종료할 수 있다.
설정
설정 파일(drx.conf)에서 설정 가능한 로그 관련 항목은 다음과 같다.
항목 | 값 | 범위 | 설명 |
|---|---|---|---|
loglevel-stdout | 로그 레벨 | trace, debug, info, warning, error, critical, off | 표준 출력되는 로그의 레벨을 지정한다. |
loglevel-file | 로그 레벨 | trace, debug, info, warning, error, critical, off | 파일로 출력되는 로그의 레벨을 지정한다. |
logfile-max-size | 파일 크기 | 용량 단위 (예: 10MB) | 로그 파일이 지정한 용량에 도달하면 현재 로그 파일을 보관하고 새로 생성한다. |
logfile-max-count | 파일 개수 | 숫자 | 현재 로그 파일과 보관된 로그 파일의 최대 개수. |
로그 레벨의 경우는 drx-ctl을 통해 실시간으로 변경할 수 있다.
drx-ctl set console-loglevel [level]
drx-ctl set file-loglevel [level]
단, 서비스 모드로 실행중인 DRX의 표준 출력 레벨은 조절할 수 없다.
출력 형식
레벨/날짜 시간 쓰레드 로거:태그] 내용
항목별 상세
항목 | 형식 | 예시 | 설명 |
|---|---|---|---|
로그 레벨/날짜 | {레벨}{날짜} | I1004 | 로그 레벨과 날짜를 붙여서 출력한다. |
시간 | 시:분:초.마이크로초 | 16:44:13.790530 | - |
쓰레드 | t{쓰레드ID} | t3056 | 해당 로그가 생성된 쓰레드 ID |
로거 | 로거 이름 | main | 로그의 카테고리를 나누기 위한 로거명 |
태그 | 태그명 | license | 로거의 하위 범위를 나타내거나 채널의 상세 정보를 나타내는 역할 |
로그 레벨
약어 | 로그 레벨 | 범위 | 예시 |
|---|---|---|---|
T | trace | 아주 자세한 동작 단계별 로그 | 함수 수준의 실행 단계 출력, 객체의 생성/파괴 등 |
D | debug | 문제가 발생하지 않으면 확인할 필요가 없는 수준의 내용 | 내부적으로 사용되는 값의 변화, 통신 내용 등 |
I | info | 상태 변화나 동작에 관한 일반적인 내용 | 접속 이벤트, 채널 상태 변화 등 |
W | warning | 의도하지 않은 문제가 발생하였지만 동작을 다시 시작하거나 지속하는데 문제가 없는 상황 | 타임아웃, 연결 실패 등 |
E | error | 의도하지 않은 문제가 발생하여 해당 동작을 지속할 수 없는 상황 | 잘못된 프로토콜 헤더, 라이선스 오류 등 |
C | critical | 프로그램의 실행을 지속할 수 없는 심각한 오류 | 예외가 발생하여 프로그램을 종료할 때 |
로그 목록
trace와 debug 레벨의 경우에는 개발 과정에서 수시로 변화할 수 있으므로, 이 문서에서는 info~critical 까지의 레벨에 대해서만 정리한다.
main
태그 | 레벨 | 내용 | 설명 | 값의 예 | 비고 | 소스 파일 |
|---|---|---|---|---|---|---|
| info | Compiled at {날짜} {시간} | DRX가 컴파일된 시간 | Oct 4 2018 09:04:38 |
| drx.cpp |
info | System Locale: {locale} | 현재 시스템 로케일 값 | en_US.windows-1252 |
| drx.cpp | |
info | DRX path: {DRX 설치경로} | DRX가 설치된 경로 | C:\Program Files\DRX | 환경변수 'DRX_PATH'에 정의된 값. | drx.cpp | |
info | EXE path: {실행파일경로} | 현재 실행한 DRX가 위치한 경로 | C:\Program Files\DRX\bin |
| drx.cpp | |
info | Starting in foreground mode | Foreground 모드로 실행 | - | 설정을 모두 읽어 프로그램 초기화가 완료된 상태. | drx.cpp | |
info | Starting in daemonize mode | Daemonize 모드로 실행 | - | 설정을 모두 읽어 프로그램 초기화가 완료된 상태. | drx.cpp | |
error | Initialization failed | 초기화 실패 | - | 환경 설정을 읽는데 실패했다. | drx.cpp | |
warning | Environment variable 'DRX_PATH' is not exists | 환경변수 DRX_PATH가 설정되지 않음 |
|
| instance.cpp | |
info | Closing drx | DRX 종료 중 | - | DRX를 종료하는 과정에서의 마지막 로그. | core.cpp | |
error | System error at quit. ({오류번호}: {오류내용}) | DRX 종료 중에 시스템 오류 발생 | - | DRX 종료 과정에서 오류가 발생함. | core.cpp | |
info | Read resources configuration success | 리소스별 세션 정보를 읽는데 성공함 | - | BSR 환경 설정으로부터 리소스별 설정을 읽음. | core.cpp | |
warning | Read resources configuration failed | 리소스별 세션 정보를 읽는데 실패함 | - | 리소스가 없을 경우 발생할 수 있다. | core.cpp | |
info | License is available | 정상적인 라이선스로 확인됨 | - |
| core.cpp | |
error | License is not available | 라이선스를 사용할 수 없음 | - | 프로그램을 종료한다. | core.cpp | |
info | Resource create complete | 모든 리소스 생성 완료 | - | 설정된 리소스를 모두 생성함. IPC 서비스를 사용할 수 있다. | core.cpp | |
info | Create resource [리소스명] | 리소스 생성 시작 |
| 해당 리소스의 생성을 시작함. | drx_manager.cpp | |
error | Resource name [리소스명] is already exists | 같은 리소스가 이미 존재함 |
| 리소스 설정이 잘못되어 동일 이름의 리소스가 두 개 이상 존재하거나, IPC를 통해 이미 존재하는 리소스를 다시 추가한 경우. | drx_manager.cpp | |
error | Failed to create resource [리소스명]. {오류내용} | 리소스 생성에 실패함 |
| 리소스 생성 도중에 오류가 발생함. 프로그램을 종료한다. | drx_manager.cpp | |
info | Resource [리소스명] deleted | 리소스가 삭제됨 |
| IPC를 통해 리소스를 삭제한 경우. | drx_manager.cpp | |
info | IPC service started | IPC 서비스가 시작됨 | - | IPC 서버가 생성됨. | drx_manager.cpp | |
error | Failed to start IPC service | IPC 서비스 시작에 실패함 | - | 메모리 부족 이외에는 발생 가능성이 거의 없다. | drx_manager.cpp | |
error | System error while stopping. ({오류번호}: {오류내용}) | 리소스, IPC, 패킷 처리 중단중 오류 발생 |
| 프로그램 종료 과정중 오류가 발생함. | drx_manager.cpp | |
license | info | Verify license is available | 라이선스 확인 시작 | - | 라이선스 확인 과정이 시작됨. | drx_manager.cpp |
info | License applied | 라이선스가 적용됨 | - | set license 명령으로 라이선스를 적용하면 출력됨. | drx_manager.cpp | |
error | Failed to get drx path | DRX 설치 경로를 얻는데 실패함 | - | 환경변수 'DRX_PATH'가 없는 경우일 수 있다. | drx_manager.cpp | |
info | Checking license for [라이선스파일] | 라이선스 파일의 확인 시작 | C:\Program Files\DRX\drx.lic | 해당 경로의 라이선스 파일을 확인한다. | drx_manager.cpp | |
error | Failed to initializing license system. {오류내용} | 라이선스 초기화에 실패함 |
| 라이선스를 읽는데 실패함. 오류 내용은 RLM에서 출력된 내용이다. | drx_manager.cpp | |
error | License file not found at [라이선스파일] | 라이선스 파일을 찾지 못함 |
| 지정한 경로에 파일이 존재하지 않음. set license 명령사용시 출력됨. | drx_manager.cpp | |
error | Invalid License {제품명}({오류번호}) | 잘못된 라이선스 | drx(-40) | 라이선스가 잘못되었거나 만료됨. 오류번호는 RLM의 오류번호이다. | drx_manager.cpp | |
error | License Expired {제품명} | 라이선스 기간초과 | drx | 기간이 초과되어 사용할 수 없다. 라이선스 교체 필요. | drx_manager.cpp | |
info | License Status: {라이선스상태} | 정상적인 라이선스로 인식됨 | Permanent |
| drx_manager.cpp | |
plugins | info | All plugin loaded |