본문으로 건너뛰기

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"
}

실행 흐름

  1. 호출 모듈이 LogServerUrl로 로그를 전송하거나 내부 이벤트로 로그 저장을 요청합니다.
  2. loggerApplicationID 기준으로 DataSource를 찾습니다.
  3. 저장소가 없고 IsSQLiteCreateOnNotSettingRequest=true이면 기본 SQLite 저장소를 생성합니다.
  4. 로그를 저장하고, 조회 API는 같은 저장소에서 목록/상세 데이터를 반환합니다.
  5. 삭제 서비스는 RemovePeriodLogDeleteRepeatSecond를 기준으로 오래된 로그를 정리합니다.

운영 주의사항

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