로깅 모듈 사용 가이드
개요
log4j2 기반으로 캐모마일 모듈들이 로그를 남기거나 개발자들이 로그를 남길수 있도록 제공하는 로깅 모듈이다.
제공하는 로깅
| 콘솔/파일 | 데이터베이스 | 주요 수집 내역 |
---|
에러 로깅 | o | o | 에러 레벨 로그+익셉션 발생 로깅 |
메서드 추적 로깅 | o | x | 매서드 호출,파라미터,리턴값, 리턴 총 시간 전부 기록(개인정보는 로깅 x) |
파일 다운로드 로깅 | o | o | 파일 다운로드시 남기는 로그 |
파일 관리 로깅 | o | o | 파일 업로드,삭제 로그 |
사용자 엑세스 로깅 | o | o | 로그인 성공,실패,로그아웃,만료 이력 기록 |
개인정보 관리 로깅 | o | o | 누가 언제,누구들의 어떤 개인정보를 추가하고,읽고,수정하고,삭제했는지 이력 기록 |
chamomile-web 모듈 추가시 제공되는 로깅 정보
chamomile-web 모듈을 추가할시 http request에서 정보를 가져와 다음과 같은 로그를 남길수있다.
세션 아이디 %X: 요청별로 구분하기 위해 UUID 랜덤으로 생성한 10자리 값.
리퀘스트 아이디 %X: 요청별로 구분하기 위해 UUID 랜덤으로 생성한 10자리 값.
사용자 아이디 %X: 현재 요청한 사용자 아이디. 없으면 #anonymous
사용자 아이피 %X: 현재 요청한 사용자 아이피
url주소 %X: 현재 요청한 url 주소
기본 로그 포맷 예시
%d{ISO8601}{GMT} %highlight{#%p}{FATAL=red blink, ERROR=red Bold, WARN=yellow bold, INFO=green Bold, DEBUG=white bold, TRACE=blue Bold} %style{request-%.-12X{chmm.RequestID}}{magenta} %style{session-%.-12X{chmm.SessionID}}{white} %style{%thread}{cyan} %style{%X{chmm.ClientIP}}{blue} %X{chmm.ClientID} %style{%X{chmm.RequestURL}}{yellow} %style{ %logger{36}}{green} %m%ex%n"/>
사용법
dependency 등록(pom.xml)
<dependency>
<groupId>net.lotte.chamomile.module</groupId>
<artifactId>chamomile-logging</artifactId>
</dependency>
log4j2.xml 작성
캐모마일에는 기본 ChamomileErrorLogger, ChamomileUserAccessLogger, ChamomileFileLogger, ChamomileFileDownloadLogger, ChamomilePrivacyLogger, ChamomileMethodLogger를 제공한다.
콘솔,파일,그외 기타 등등의 appender를 추가하고 싶다면 logger name을 입력하고 appeder를 추가한다.
<logger name="ChamomileUserAccessLogger" level="FATAL" additivity="false">
<AppenderRef ref="console"/>
<AppenderRef ref="sqlErrorDailyRollingFile"/>
</logger>
사용자 접속 로그
로거 이름 : ChamomileUserAccessLogger
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
제공 메서드
LoggingUtils.errorLogging(Exception error);
수집 내역
적재하는 내용 : 로그 날짜, 리퀘스트 아이디, 세션 아이디, 사용자 아이디, 접속 IP, 접속 URL,메세지, 예외 발생 원인, 예외 발생 메서드, 예외 발생 라인, 에러 상세내용
디비 테이블
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 // 에러 발생 시간
);
파일 다운로드 이력
로거 이름 : ChamomileFileDownloadLogger
제공 메서드
LoggingUtils.fileDownlaodLogging(String filePath,String fileHash,String originalFileName,String downloadReason)
수집내역
로그 날짜, 리퀘스트 아이디, 세션 아이디, 사용자 아이디, 접속 IP, 접속 URL, 다운로드 파일명, 파일 사이즈, 다운로드 사유
디비 테이블
CREATE TABLE CHMM_FILE_DOWNLOAD_LOGGING (
file_downlaod_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
is_privacy_file char(1), // 개인정보 파일 여부
privacy_file_download_reason VARCHAR(255), // 개인정보 파일 다운로드 사유
file_hash VARCHAR(255), // 파일 해시
original_file_name VARCHAR(255), // 원본 파일 이름
file_path VARCHAR(255), // 파일 실제 위치
file_size INT, // 파일 사이즈
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 // 로깅 시간
);
메서드 추적 로그
로거 이름 : ChamomileMethodLogger
chmm.logging.methodLoggingPackageName=net.lotte.app // 패키지 이름으로 설정
매서드 추적 로그는 어노테이션 및 pacakge 네임을 설정하여 메서드에 정보를 로깅하는 기능이다. 기본 디비 적재 기능을 제공하지 않는다.(기본 콘솔/파일 적재)
@AutoLogging // 개별 메서드 혹은 클래스에 어노테이션 적용
public Page<AuthHierarchyVO> getAuthHierarchyList(AuthHierarchyQuery authHierarchyQuery, Pageable pageable) {
return authHierarchyMapper.findAuthHierarchyListData(authHierarchyQuery, pageable);
}
수집내역
로그 날짜, 리퀘스트 아이디, 세션 아이디, 사용자 아이디, 접속 ip, 접속 URL, 메서드 이름, 메서드 파라미터, 메서드 리턴 값, 메서드 반환 시간
Last modified: 19 11월 2024