ChamomileGuides 3.0.4 Help

로깅 모듈 사용 가이드

개요

log4j2 기반으로 캐모마일 모듈들이 로그를 남기거나 개발자들이 로그를 남길 수 있도록 제공하는 로깅 모듈이다. 기본적인 로깅 테이블과 로그 유틸을 제공하며 다른 모듈과 연동하여 자동으로 로깅을 하는 기능 제공한다.

제공하는 로깅

필요 모듈

주요 수집 내역

에러 로깅

chamomile-web

에러 레벨 로그+익셉션 발생 로깅

파일 다운로드 로깅

chamomile-file

파일 다운로드시 남기는 로그

파일 관리 로깅

chamomile-file

파일 업로드,삭제 로그

사용자 엑세스 로깅

chamomile-security, chamomile-security-jwt

로그인 성공,실패,로그아웃,만료 이력 기록

개인정보 관리 로깅

x

누가 언제,누구들의 어떤 개인정보를 추가하고,읽고,수정하고,삭제했는지 이력 기록

chamomile-web 모듈 추가 시 제공되는 로깅 정보

chamomile-web 모듈을 추가할 시 http request에서 정보를 가져와 다음과 같은 로그를 남길 수 있다.

  • 세션 아이디 %X: 요청별로 구분하기 위해 UUID 랜덤으로 생성한 10자리 값.

  • 리퀘스트 아이디 %X: 요청별로 구분하기 위해 UUID 랜덤으로 생성한 10자리 값.

  • 사용자 아이디 %X: 현재 요청한 사용자 아이디. 없으면 #anonymous

  • 사용자 아이피 %X: 현재 요청한 사용자 아이피

  • url주소 %X: 현재 요청한 url 주소

java 코드에서는 MDC get 메서드를 통해 위에 로깅 정보를 가져올 수 있다.

String sessionId = MDC.get("chmm.SessionID");

기본 로그 포맷 예시

%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"/>

사용법

  1. dependency 등록(pom.xml)

    <dependency> <groupId>net.lotte.chamomile.module</groupId> <artifactId>chamomile-logging</artifactId> </dependency>
  2. 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

chamomile-security, chamomile-security-jwt 모듈을 추가하면 로그인 실패, 로그인 성공, 로그아웃, 세션 만료 등의 기록을 자동으로 남길수 있다.

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

net.lotte.chamomile.module.logging.annotation.PrivacyDTO 상속 받아 구현하여 로깅 하는 매서드와 String 기반 매서드를 제공한다. PrivacyDTO 상속 받으면 다음과 같이 메서드 오버라이드하여 구현한다.

public class UserExcelUploadVO implements PrivacyDTO { private String userId; /* 사용자 ID */ private String userEmail; /* 사용자 이메일 */ private String userMobile; /* 사용자 휴대폰 번호 */ private String userName; /* 사용자 이름 */ @Override public String getPrivacyUserID() { // 사용자 식별 아이디 return this.userId; } @Override public String getPrivacyFieldList() { // 현재 개인정보 객체에 개인정보 내역 return "이름, 이메일"; } }

제공하는 메서드

// PrivacyDTO 기반 로깅 매서드 LoggingUtils.privacyLogging( PrivacyDTO privacyDTO, String privacyMessage, PrivacyActionType privacyActionType) // 문자열 기반으로 직접 호출하여 로그를 남기는 메서드 LoggingUtils.privacyLogging( String privacyUserIdList, String privacyFieldList, long privacyUserCount, String privacyMessage, 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 // 로깅 시간 );
Last modified: 21 4월 2025