logger
logger는 HandStack 모듈들이 전송한 거래 로그와 이벤트 로그를 저장하고 조회하는 모듈입니다. SQLite를 기본으로 사용할 수 있으며, 설정에 따라 애플리케이션별 로그 저장소와 테이블을 분리합니다.
책임 범위
/logger/api/log/insert요청이나 내부 이벤트를 받아 로그를 저장합니다.- 애플리케이션별
DataSource설정으로 저장소, 테이블, 보관 기간을 결정합니다. - 로그 목록과 상세 조회 API를 제공합니다.
LogDeleteService백그라운드 작업으로 보관 기간이 지난 로그를 삭제합니다.- 동적 schema 설정이 있으면 컬럼 정의와 역할 매핑으로 DDL과 insert/list/detail 쿼리를 구성합니다.
주요 API
| 메서드 | 경로 | 용도 |
|---|---|---|
GET/POST | /logger/api/log/insert | 로그 이벤트를 저장합니다. |
GET | /logger/api/log/list | 저장된 로그 목록을 조회합니다. |
GET | /logger/api/log/detail | 로그 상세 정보를 조회합니다. |
핵심 구현
Areas/logger/Controllers/LogController.cs: 로그 저장/조회 API 진입점입니다.Events/LoggerRequestHandler.cs: 모듈 내부 이벤트 기반 로그 저장 요청을 처리합니다.Services/LogDeleteService.cs: 보관 기간 기준 삭제 백그라운드 서비스입니다.SQL: provider별 기본 DDL과 쿼리 리소스입니다.Entity/DataSource.cs: 로그 저장소와 동적 schema 설정 타입입니다.
주요 설정
| 설정 | 설명 |
|---|---|
IsSQLiteCreateOnNotSettingRequest | 설정되지 않은 애플리케이션 로그 요청을 받을 때 SQLite 저장소를 자동 생성할지 결정합니다. |
LogDeleteRepeatSecond | 로그 삭제 백그라운드 작업 반복 주기입니다. |
DataSource | 애플리케이션별 저장소, provider, 테이블, 보관 기간 설정입니다. |
DataSource.Schema | 동적 schema를 사용할 때 컬럼과 역할 매핑을 정의합니다. |
BusinessServerUrl | 내부 거래 실행 URL입니 다. |
DataSource 예시는 다음과 같습니다.
{
"ApplicationID": "HDS",
"TableName": "TransactLog",
"DataProvider": "SQLite",
"RemovePeriod": -30,
"ConnectionString": "URI=file:../sqlite/HDS/logger/transact.db;Journal Mode=Off;BinaryGUID=False;DateTimeFormat=Ticks;Version=3;",
"IsEncryption": "N"
}
실행 흐름
- 호출 모듈이
LogServerUrl로 로그를 전송하거나 내부 이벤트로 로그 저장을 요청합니다. logger는ApplicationID기준으로DataSource를 찾습니다.- 저장소가 없고
IsSQLiteCreateOnNotSettingRequest=true이면 기본 SQLite 저장소를 생성합니다. - 로그를 저장하고, 조회 API는 같은 저장소에서 목록/상세 데이터를 반환합니다.
- 삭제 서비스는
RemovePeriod와LogDeleteRepeatSecond를 기준으로 오래된 로그를 정리합니다.
운영 주의사항
- 설정되지 않은 애플리케이션 저장소 자동 생성은 개발에는 편리하지만 운영에서는 로그 저장소 난립을 만들 수 있습니다.
RemovePeriod가 음수이면 보관 기간 기준 삭제가 적용됩니다. 장기 보관이 필요한 로그는 별도 저장소나 백업 정책을 둡니다.- 로그에는 요청/응답 전문과 예외 정보가 포함될 수 있으므로 개인정보와 비밀 값 마스킹 정책을 상위 모듈과 함께 설계합니다.
- 실시간 모니터링은 운영 환경에 맞는 로그 수집 도구와 파일 권한 정책을 사용합니다.