728x90
반응형
1. Logback
현재 프로젝트 기준 logback.xml의 root의 level을 debug로 변경하면 로그 확인 가능
(...생략) ==> Preparing: select * , (select wname from scs_wlist where wid = A.wid) , (select task_name from scs_taskinfo where tid = A.tid) as task_name , (select server_name from scs_server where serverid = A.serverid_src) as server_name_src , (select server_name from scs_server where serverid = A.serverid_dst) as server_name_dst from (select * from scs_tasklog order by end_dt desc) A join scs_taskinfo B on B.tid = A.tid where 1=1 and A.task_kind = ? AND (select wname from scs_wlist where wid = A.wid) LIKE ?||'%' AND (select task_name from scs_taskinfo where tid = A.tid) LIKE ?||'%' AND (select server_name from scs_server where serverid = A.serverid_src) LIKE ?||'%' AND (select server_name from scs_server where serverid = A.serverid_dst) LIKE ?||'%' AND A.start_dt >= ?::timestamp AND (A.end_dt <= ?::timestamp OR A.end_dt is null) ORDER by END_Dt desc limit ? offset ((? - 1) * ?)
(...생략) ==> Parameters: 1(Integer), (String), (String), (String), (String), 2022-11-20 00:00:00(String), 2022-12-20 23:59:59(String), 20(Integer), 1(Integer), 20(Integer)
(...생략) <== Total: 20
위와 같이 한 줄에 모든 쿼리가 작성되며 logger에 따라 다른 level이 사용되지 않아 Log4j를 사용
2. Log4j 설정
2.1. pom.xml dependency 추가
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.16</version>
</dependency>
2.2 log4jdbc.log4j2.properties 생성
logback.xml 자리에 해당 파일 생성
현 프로젝트 기준 Project > resource
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
//로그의 개행 처
log4jdbc.dump.sql.maxlinelength=0
3. logback.xml 수정
로그가 어떻게 콘솔, 파일에 찍힐 지 설정
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<layout>
<pattern> [%d{yyyy-MM-dd HH:mm:ss}] [%-5level] [%file; %method:%line] - %msg%n
</pattern>
</layout>
</appender>
<appender name="FILE-THREAD" class="ch.qos.logback.classic.sift.SiftingAppender">
<discriminator>
<key>logFileName</key>
<defaultValue>NAME</defaultValue>
</discriminator>
<sift>
<!-- A standard RollingFileAppender, the log file is based on 'logFileName' at runtime -->
<appender name="FILE-${logFileName}" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${LOG_HOME}/${logFileName}.log</file>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>[%d{yyyy-MM-dd HH:mm:ss}] [%-5level] %file; %method:%line - %msg%n</Pattern>
</encoder>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<FileNamePattern>${LOG_HOME}/${logFileName}.%i.log.zip</FileNamePattern>
<MinIndex>1</MinIndex>
<MaxIndex>10</MaxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>10MB</MaxFileSize>
</triggeringPolicy>
</appender>
</sift>
</appender>
<logger name="jdbc" level="off"/>
<logger name="jdbc.sqlonly" level="off" />
<logger name="jdbc.sqltiming" level="info" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="FILE-THREAD"/>
</logger>
<logger name="jdbc.audit" level="off" />
<logger name="jdbc.resultset" level="off" />
<logger name="jdbc.resultsettable" level="off" />
<logger name="jdbc.connection" level="off" />
3.1 logger name 및 level
Logger Desc
jdbc.sqlonly | SQL문만을 로그로 남기며, PreparedStatement일 경우 관련된 argument 값으로 대체된 SQL문 확인 가능 |
jdbc.sqltiming | SQL문과 실행 시간 정보(milliseconds) 포함 |
jdbc.audit | ResultSet을 제외 모든 JDBC 호출 정보 확인 (많은 로그가 생성 되므로 필요시 사용) |
jdbc.resultset | ResultSet을 포함 모든 JDBC 호출 정보 확인 (많은 로그가 생성 되므로 필요시 사용) |
jdbc.resultsettable | 조회된 데이터를 테이블 형태로 로그 확인 |
Level Desc
degug | 디버그 용도로 일반 정보도 상세하게 출력 |
info | 상태 변경과 같이 일반적인 정보를 출력 |
wran | 경고성 메시지 (처리가능한 문제 또는 향후 에러의 원인이 될 수 있는 경고성 메시지) |
error | 일반적인 에러로 처리가 반드시 필요 |
fatal | 시스템적으로 아주 심각한 에러가 발생, 어플리케이션 작동 불가 |
all | 모든 로깅 |
off | 로깅 해 |
3.2 표현식
Level Desc
%d / %d{y:m:d} | 이벤트 발생 날짜 출력 ( 프로그램의 실행속도 영향) |
%level | 로그 레벨 |
%file | 프로그램 파일명 |
%method | method 이름 |
%line | 라인 수 |
%msg | 로그 내용 |
%n | 개행 |
728x90
반응형
'Java' 카테고리의 다른 글
Java Thread (예제 newSingleThreadScheduledExecutor) (0) | 2022.06.15 |
---|---|
Runnable JAR Export + Window Scheduler (0) | 2022.05.31 |
String, StringBuffer, StringBuilder (0) | 2022.05.26 |