른록노트
[Spring] 전자정부프레임워크 (3.10) 로그설정 본문
1. log4j2 설정 방법
log4j2 관련 라이브러리는 pom.xml에 등록하면 됩니다.
그리고 프로젝트가 시작되면 log4j2.xml 설정파일을 찾아 설정을 적용합니다.
2. log4j2.xml 파일
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%d %5p [%c] %m%n" />
</Console>
<RollingFile name="file" fileName="D:/workspace/egov/logs/egovLogfile.log" filePattern="D:/workspace/egov/logs/egovLogfile.log.%d{yyyy-MM-dd}"> <!-- 로컬환경 -->
<!-- <RollingFile name="file" fileName="./logs/sjcusfs2021.log" filePattern="./logs/sjcusfs2021.log.%d{yyyy-MM-dd}"> 실서버 환경 -->
<PatternLayout pattern="%d %5p [%c] %m%n" />
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="java.sql" level="INFO" additivity="false">
<AppenderRef ref="console" />
</Logger>
<Logger name="com" level="INFO">
<AppenderRef ref="console" />
</Logger>
<!-- log SQL 관련로그 -->
<Logger name="jdbc.connection" level="INFO" additivity="false">
<!-- <AppenderRef ref="console" /> -->
</Logger>
<Logger name="jdbc.sqltiming" level="INFO" additivity="false">
<!-- <AppenderRef ref="console" /> -->
</Logger>
<Logger name="jdbc.audit" level="INFO" additivity="false">
<!-- <AppenderRef ref="console" /> -->
</Logger>
<Logger name="jdbc.resultset" level="INFO" additivity="false">
<!-- <AppenderRef ref="console" /> -->
</Logger>
<Logger name="jdbc.sqlonly" level="INFO" additivity="false">
<!-- <AppenderRef ref="console" /> -->
</Logger>
<Logger name="jdbc.resultsettable" level="INFO" additivity="false">
<!-- <AppenderRef ref="console" /> -->
</Logger>
<Logger name="org.springframework" level="INFO">
<AppenderRef ref="console" />
</Logger>
<Root level="INFO">
<AppenderRef ref="console" />
<AppenderRef ref="file" />
</Root>
</Loggers>
</Configuration>
제 log4j2.xml 파일을 보면서 설명하겠습니다.
로컬환경과 실서버 환경을 나눈 이유는 상대경로(실서버 환경)로 실행될 경우 eclipse의 톰캣 배포된 폴더에서 logs 폴더를 만들기때문에
파일경로를 로컬환경과 실서버 환경으로 나눴습니다.
2.1. Configuration 태그
여기 태그안에 설정을 저장합니다.
2.2. Appenders 태그
로그가 보여주거나 저장되는 모듈을 정의해주는 태그입니다.
2.2.1. Console 태그
로그가 console.창에서 보여집니다.
2.2.2. RollingFile 태그
로그를 파일로 저장합니다.
name 속성은 Apppender 이름입니다. logger 태그 안에서 지정 해줄 수 있습니다.
fileName 속성은 저장되는 logfile 이름입니다.
filePattern 파일명이 저장되는 패턴입니다. 여기서 중요한점은 %d{yyyy-MM-dd} 날짜 형식이 끝나는 지점을 잘 기억하고 계셔야합니다. 여기선 dd (일)로 끝나고 있네요.
PatternLayout 로그가 출력되는 형식입니다.
Policies 해당 Appender의 정책을 설정하는 태그입니다.
- TimeBasedTriggeringPolicy 태그를 사용하여 interval="1" modulate="true" 값을 주었습니다.
- interval은 위에 filePattern에서 날짜 형식이 끝나는 지점 기준으로 동작합니다. dd로 끝났으니 일별로 저장됩니다. (default 1)
- modulate는 interval이 동작할때 실행시간부터인지 아니면 00초부터 interval에 맞춰서 끊어서 시작인지에 대한 여부입니다. (default false)
2.3. Loggers 태그
어떤 패키지의 로그가 찍힐지 정하는 Logger들을 정의해주는 태그입니다.
2.3.1. Logger 태그
로그를 보여줄 패키지를 지정하는 태그입니다
name 속성은 패키지명을 지정합니다.
level 속성은 지정한 값 이하의 값들만 보여주도록 합니다.
OFF 0
FATAL 100
ERROR 200
WARN 300
INFO 400
DEBUG 500
TRACE 600
ALL Integer.MAX_VALUE
만약 INFO를 설정했다면 INFO, WARN, ERROR, FATAl 이 모두 보입니다
additivity 속성은 하위 패키지나 연관된 패키지들을 다 보여주도록 합니다.
만약
<Logger name="com" level="INFO" additivity="false">
<AppenderRef ref="console" />
</Logger>
/* com 패키지에 대한 로그만 보임 */
<Logger name="com" level="INFO">
<AppenderRef ref="console" />
</Logger>
/* com 패키지를 포함한 하위 패키지 로그가 보임 */
2.3.2. Root 태그
Logger로 수집된 log들을 한번에 관리할 수 있는 태그입니다.
2.3.3. AppenderRef 태그
지정한 Appender로 로그를 출력하는 태그입니다.
2.4. (참고) mybatis query log (변수 매핑된 쿼리 로그 출력)
mybatis query log (변수 매핑된 쿼리 로그 출력)
3. pom.xml
아래 pom.xml 파일은 전자정부프레임워크 3.10 시작하기 파일을 기반으로 수정하였습니다.
<!-- log4j2 취약점 업데이트 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.16.0</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.16.0</version>
</dependency>
<!-- Sql Log -->
<dependency>
<groupId>org.lazyluke</groupId>
<artifactId>log4jdbc-remix</artifactId>
<version>0.2.7</version>
</dependency>
4. 이클립스 console 라인 제한 해제 방법
Preferences > Run/Debug > Console > Limit console output 해제
참고사이트
공식사이트 log4j2 configuration
mybatis query log (변수 매핑된 쿼리 로그 출력)
log4j2 customloglevels
전자정부프레임워크 log4j2