log관리를 하기 위해 log4j2/logback/slf4j등 어떤것을 이용할까 생각하다가 21년 보안이슈가 되었지만 다시 개선 된 log4j2 를 사용하기로 했습니다.
<!-- log4j2 및 jdbc 설정-->
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.16</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.18.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.18.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.18.0</version>
</dependency>
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
<bean id= "dataSource-postgreSql" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${Globals.DriverClassName}"/>
<property name="url" value="${Globals.Url}"/>
<property name="username" value="${Globals.UserName}"/>
<property name="password" value="${Globals.Password}"/>
</bean>
DriverClassName=net.sf.log4jdbc.sql.jdbcapi.DriverSpy
Url=jdbc:log4jdbc:postgresql://tspdj.iptime.org:18432/ojt
클래스이름은 그대로 복사붙여넣기 하고, url 은 jdbc와 디비이름 사이에 log4jdbc
를 입력해주면 완료
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<properties>
<property name="name">app</property>
<property name="pattern">%d{yyyy-MM-dd HH:mm:ss}| %-5.5p|%-30.30C::%-30.30M:%-5.5L| %msg%n</property>
</properties>
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%d %5p [%c] %m%n" />
</Console>
<RollingFile name="RollingFileAppender" fileName="./log/${name}.log"
filePattern="./log/$${date:yyyy}/$${date:MM}/$${date:dd}/${name}_%d{yyyyMMddHH}.log">
<PatternLayout>
<!-- 날짜, 로그 레벨, 로거 이름, 라인 번호, 메시지 등의 정보를 포함합니다. -->
<Pattern>${pattern}</Pattern>
</PatternLayout>
<Policies>
<!-- interval=1 (매일), modulate=true (정각) -->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
</Policies>
<DefaultRolloverStrategy max="10000"/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="kr.or.woniProject" level="DEBUG" additivity="false">
<AppenderRef ref="console" />
<AppenderRef ref="RollingFileAppender"/>
</Logger>
<Logger name="jdbc.sql" level="DEBUG" additivity="false">
<AppenderRef ref="console" />
<AppenderRef ref="RollingFileAppender"/>
</Logger>
<!-- <Logger name="jdbc.sqlonly" level="INFO" additivity="false">-->
<!-- <AppenderRef ref="console" />-->
<!-- <AppenderRef ref="RollingFileAppender"/>-->
<!-- </Logger>-->
<Logger name="egovframework" level="INFO" additivity="false">
<AppenderRef ref="console" />
<AppenderRef ref="RollingFileAppender"/>
</Logger>
<!-- log SQL with timing information, post execution -->
<Logger name="jdbc.sqltiming" level="INFO" additivity="false">
<AppenderRef ref="console" />
<AppenderRef ref="RollingFileAppender"/>
</Logger>
<Logger name="org.springframework" level="DEBUG" additivity="false">
<AppenderRef ref="console" />
<AppenderRef ref="RollingFileAppender"/>
</Logger>
<!-- SQL 결과 조회된 데이터의 table을 로그로 남긴다.(빼도됨) -->
<Logger name="jdbc.resultsettable" level="DEBUG" additivity="false">
<AppenderRef ref="console" />
<AppenderRef ref="RollingFileAppender"/>
</Logger>
<!-- ResultSet을 제외한 모든 JDBC 호출 정보를 로그로 남긴다. 많은 양의 로그가 생성되므로 특별히 JDBC 문제를 추적해야 할 필요가 있는 경우를 제외하고는 사용을 권장하지 않는다.-->
<!-- <Logger name="jdbc.audit" additivity="false">-->
<!-- <level value="WARN"/>-->
<!-- <appender-ref ref="console"/>-->
<!-- </Logger>-->
<!-- <Root level="INFO">-->
<!-- <AppenderRef ref="console" />-->
<!-- <AppenderRef ref="RollingFileAppender"/>-->
<!-- </Root>-->
</Loggers>
</Configuration>
해당쿼리와
해당 결과값을 테이블형식으로 보여지는 것을 볼 수 있습니다.
톰캣이 구동되는 위치파일에 보면 위에서 설정한 .log/app._날짜.log
이 생성됨을 날짜별로 볼 수 있습니다.
⭐ filePattern="./log/{date:MM}/${name}_%d{yyyyMMddHH}.log" 에
마지막.log에 .gz 를 붙이면 압축파일로 저장이 됩니다.
filePattern="./log/$${date:yyyy}/$${date:MM}/$${date:dd}/${name}_%d{yyyyMMddHH}.log.gz"
Java 로깅 logger, log4j, logback, slf4j 비교
출처: https://0soo.tistory.com/241 [Lifealong:티스토리]