본문으로 건너뛰기

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 설정 타입입니다.

주요 설정​

설정설명
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"
}

실행 흐름​

  1. 호출 모듈이 LogServerUrl로 로그를 전송하거나 내부 이벤트로 로그 저장을 요청합니다.
  2. logger는 ApplicationID 기준으로 DataSource를 찾습니다.
  3. 로그 저장소는 DataSource에 명시적으로 등록합니다. 등록되지 않은 애플리케이션은 로그를 저장하지 않습니다.
  4. 로그를 저장하고, 조회 API는 같은 저장소에서 목록/상세 데이터를 반환합니다.
  5. 삭제 서비스는 RemovePeriod와 LogDeleteRepeatSecond를 기준으로 오래된 로그를 정리합니다.

운영 주의사항​

  • 운영에서는 로그를 수집할 애플리케이션의 DataSource를 명시적으로 등록하고 로그 보존 기간을 관리합니다.
  • RemovePeriod가 음수이면 보관 기간 기준 삭제가 적용됩니다. 장기 보관이 필요한 로그는 별도 저장소나 백업 정책을 둡니다.
  • 로그에는 요청/응답 전문과 예외 정보가 포함될 수 있으므로 개인정보와 비밀 값 마스킹 정책을 상위 모듈과 함께 설계합니다.
  • 실시간 모니터링은 운영 환경에 맞는 로그 수집 도구와 파일 권한 정책을 사용합니다.