캐모마일 로깅 모듈 가이드
개요
log4j2 기반으로 캐모마일 모듈들이 로그를 남기거나 개발자들이 로그를 남길 수 있도록 제공하는 로깅 모듈이다.
사용법
dependency
<dependency>
<groupId>net.lotte.chamomile.module</groupId>
<artifactId>chamomile-logging</artifactId>
</dependency>
제공하는 로깅 목록
주요 수집 내역 | |
---|---|
에러 로깅 | 에러 레벨 로그+익셉션 발생 로깅 |
메서드 추적 로깅 | 매서드 호출,파라미터,리턴값, 리턴 총 시간 전부 기록(개인정보는 로깅 x) |
파일 관리 로깅 | 파일 업로드,삭제 로그 |
사용자 엑세스 로깅 | 로그인 성공,실패,로그아웃,만료 이력 기록 |
개인정보 관리 로깅 | 누가 언제,누구들의 어떤 개인정보를 추가하고,읽고,수정하고,삭제했는지 이력 기록 |
chamomile-web 모듈 추가 시 제공되는 로깅 정보
pom.xml에 chamomile-web 모듈을 추가할 시 http request에서 정보를 가져와 다음과 같은 로그를 남길 수 있다.
- 세션 아이디 %X{chmm.SessionID}: 요청별로 구분하기 위해 UUID 랜덤으로 생성한 10자리 값.
- 리퀘스트 아이디 %X{chmm.RequestID}: 요청별로 구분하기 위해 UUID 랜덤으로 생성한 10자리 값.
- 사용자 아이디 %X{chmm.ClientID}: 현재 요청한 사용자 아이디. 없으면 #anonymous
- 사용자 아이피 %X{chmm.ClientIP}: 현재 요청한 사용자 아이피
- url주소 %X{chmm.RequestURL}: 현재 요청한 url 주소
기본 로그 예시
시간, 로그레벨, 리퀘스트 아이디, 세션 아이디, 쓰레드이름, 아이피, 사용자 아이디, 접속 주소, 로거 네임, 로그 메시지
2024-03-04 13:13:25 #INFO request-1303900B5EF5 session-122aa11d-0d3 http-nio-23636-exec-9 0:0:0:0:0:0:0:1 anonymous /api-docs/user net.lotte.chamomile.module.message.repository.MessageInfoRepositoryImpl findList = []
기본 제공 로거 사용법
-
캐모마일에는 기본 ChamomileErrorLogger, ChamomileUserAccessLogger, ChamomileFileLogger, ChamomilePrivacyLogger를 제공한다.
-
콘솔,파일,그외 기타 등등의 appender를 추가하고 싶다면 logger name을 입력하고 appeder를 추가한다.
-
아래 로거들의 DBAppender는 자동으로 추가되며,
<!-- chamomile logging -->
<logger name="ChamomileErrorLogger" level="ERROR" additivity="false">
<AppenderRef ref="console"/>
<AppenderRef ref="errorRollingFile"/>
</logger>
<logger name="ChamomileUserAccessLogger" level="INFO" additivity="false">
<AppenderRef ref="console"/>
<AppenderRef ref="dailyRollingFile"/>
</logger>
<logger name="ChamomilePrivacyLogger" level="INFO" additivity="false">
<AppenderRef ref="console"/>
<AppenderRef ref="dailyRollingFile"/>
</logger>
<logger name="ChamomileFileStateLogger" level="INFO" additivity="false">
<AppenderRef ref="console"/>
<AppenderRef ref="dailyRollingFile"/>
</logger>
사용자 접속 로그
로거 이름 : ChamomileUserAccessLogger
설명 :
로그인 시도, 성공, 실패, 로그아웃 내역 등을 로깅하는 로거. chamomile-security 모듈로 로그인을 시도하면 자동으로 로깅된다.
제공 메서드 :
LoggingUtils.userAccessLogging(String loginUserId,UserAccessActionType userAccessActionType)
로깅 내역 :
로그 날짜, 리퀘스트 아이디, 세션 아이디, 아이디(로그인 되고 or 로그인 시도한), 접속 ip, 엑세스 내역(로그인 성공,실패,로그아웃,만료(userAccessActionStatus))
디비 테이블 :
CREATE TABLE CHMM_USER_ACCESS_LOGGING (
user_access_logging_id BIGINT PRIMARY KEY,
client_ip VARCHAR(50), // 사용자 IP
request_url VARCHAR(255), // 요청 URL
request_id VARCHAR(20), // 요청 ID
session_id VARCHAR(20), // 세션 ID
login_user_id VARCHAR(30), // 로그인 시도 아이디
user_access_action_type VARCHAR(6), // 로그인 성공,실패,로그아웃,만료
log_date TIMESTAMP // 로그 시간
);
에러 로그
로거 이름 : ChamomileErrorLogger
설명 :
Excepton 정보를 로깅하는 로거로 chamomile global Exception Handler에 의해 Exception처리가 되었다면 자동으로 로깅된다.
로깅 내역 :
적재하는 내용 : 로그 날짜, 리퀘스트 아이디, 세션 아이디, 사용자 아이디, 접속 IP, 접속 URL,메세지, 예외 발생 원인, 예외 발생 메서드, 예외 발생 라인, 에러 상세내용
제공 메서드 :
LoggingUtils.errorLogging(Exception error);
디비 테이블
CREATE TABLE CHMM_ERROR_LOGGING (
error_logging_id BIGINT PRIMARY KEY, // ID
client_id VARCHAR(30), // 사용자 ID
client_ip VARCHAR(50), // 사용자 IP
request_url VARCHAR(255), // 요청 URL
request_id VARCHAR(20), // 요청 ID
session_id VARCHAR(20), // 세션 ID
exception_occur_line VARCHAR(255), // 예외 발생 위치
exception_method_cause VARCHAR(255),// 예외 발생 원인
exception_method_info VARCHAR(255), // 예외 발생 메서드 정보
exception_log_msg TEXT, // 에러 상세 내용
log_date TIMESTAMP // 에러 발생 시간
);
파일 관리 이력
로거 이름 : ChamomileFileLogger
설명 : 파일 업로드, 다운로드, 삭제 로깅을 위한 로거
로깅 내역
로그 날짜, 리퀘스트 아이디, 세션 아이디, 사용자 아이디, 접속 IP, 접속 URL,업로드 경로,업로드 파일명,파일 사이즈, 파일 업로드/삭제 상태 (fileActionStatus) , 개인정보 파일 여부
제공 메서드
LoggingUtils.fileLogging(String filePath,String fileHash,String originalFileName,FileActionType fileActionType)
디비 테이블
CREATE TABLE CHMM_FILE_LOGGING (
file_logging_id BIGINT PRIMARY KEY,
client_id VARCHAR(30), // 사용자 ID
client_ip VARCHAR(50), // 사용자 IP
request_url VARCHAR(255), // 요청 URL
request_id VARCHAR(20), // 요청 ID
session_id VARCHAR(20), // 세션 ID
file_action_type VARCHAR(10), // 파일 관리 상태
original_file_name VARCHAR(255), // 원래 파일 이름
file_size INT, // 파일 크기
file_path VARCHAR(255), // 실제 파일 위치
file_hash VARCHAR(20), // 파일 해시 코드
log_date TIMESTAMP // 로깅 날짜
);
개인정보 관리 로그
로거 이름 : ChamomilePrivacyLogger
설명: 개인정보 로깅을 위한 로거.
제공 메서드:
LoggingUtils.privacyLogging(List<String> privacyUserIdList,List<String> privacyFieldList,PrivacyActionType privacyActionType)
로깅 내역
로그 날짜, 리퀘스트 아이디, 세션 아이디, 사용자 아이디, 접속 ip, 접속 URL, 개인정보 사용자 아이디(privateUserIDList),개인정보 사용자 수(privateUserCount), 개인정보 필드 내역(privateFieldList) ,개인정보 접근/수정/삭제(privateActionType)
디비 테이블
CREATE TABLE CHMM_PRIVACY_LOGGING (
privacy_logging_id BIGINT PRIMARY KEY,
client_id VARCHAR(30), // 사용자 ID
client_ip VARCHAR(50), // 사용자 IP
request_url VARCHAR(255), // 요청 URL
request_id VARCHAR(20), // 요청 ID
session_id VARCHAR(20), // 세션 ID
private_user_count INT, // 개인정보 로깅 대상자 수
privacy_action_type VARCHAR(6), // 개인정보 접근/수정/삭제
privacy_field_list VARCHAR(500), // 개인정보 필드
privacy_user_id_list VARCHAR(500), // 개인정보 로깅 대상자 아이디 목록
log_date TIMESTAMP // 로깅 시간
);