개발환경: 전자정부표준프레임워크(eGovFrame) 3.10.0
1. log4j란?
Log4j는 자바기반의 로깅 유틸리티로 Apache에서 만든 오픈소스 라이브러리라고 한다. Log4j는 옵션 설정을 통해서 선택적으로 로그를 남기거나 특정 파일에 로그를 생성하는 등 다양한 이점을 가지고 있다.
log4j 레벨
로그 레벨 | 설명 |
FATAL | 아주 심각한 에러가 발생한 상태. |
ERROR | 어떠한 요청을 처리하는 중 문제가 발생한 상태. |
WARN | 프로그램의 실행에는 문제가 없지만, 향후 시스템 에러의 원인이 될 수 있는 경고성 메시지. |
INFO | 어떠한 상태변경과 같은 정보성 메시지. |
DEBUG | 개발시 디버그 용도로 사용하는 메시지. |
TRACE | 디버그 레벨이 너무 광범위한것을 해결하기 위해서 좀 더 상세한 이벤트를 나타냄. |
설정 레벨 이상의 로그가 출력된다. INFO로 설정했다면 INFO이상의 레벨인 INFO, WARN, ERROR, FATAL 로그만 출력된다.
log4j 구성요소
요소 | 설명 |
Logger | 출력할 메시지를 Appender에 전달. |
Appender | 전달된 로그를 어디에 출력할 지 결정. (콘솔 출력, 파일 기록, DB 저장 등) |
Layout | 로그를 어떤 형식으로 출력할 지 결정. |
Logger
요소 | 설명 |
jdbc.sqlonly | SQL문만을 로그로 남기며, PreparedStatement일 경우 관련된 argument 값으로 대체된 SQL문이 보여진다. |
jdbc.sqltiming | SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)를 포함한다. |
jdbc.audit | ResultSet을 제외한 모든 JDBC 호출 정보를 로그로 남긴다. 많은 양의 로그가 생성되므로 특별히 JDBC 문제를 추적해야 할 필요가 있는 경우를 제외하고는 사용을 권장하지 않는다. |
jdbc.resultset | ResultSet을 포함한 모든 JDBC 호출 정보를 로그로 남기므로 매우 방대한 양의 로그가 생성된다. |
Appender
요소 | 설명 |
ConsoleAppender | org.apache.log4j.ConsoleAppender 콘솔에 로그 메시지를 출력한다. |
FilerAppender | org.apache.log4j.FilerAppender 로그 메시지를 지정된 파일에 기록한다. |
RollingFileAppender | org.apache.log4j.RollingFileAppender 파일 크기가 일정 수준 이상이 되면 기존 파일을 백업파일로 두고 처음부터 다시 기록한다. |
DailyRollingFilerAppender | org.apache.log4j.Daily.Rolling.File.Appender 일정 기간 단위로 로그 파일을 생성하고 기록한다. |
LayOut
패턴 | 설명 |
%m | 로그 내용 출력 |
%p | debug, info, warn, error 등의 priority 출력 |
%r | 어플리케이션 시작 후 이벤트가 발생하는 시점까지의 경과시간. (밀리세컨드로 출력) |
%c | package 출력 |
%C | 클래스명 출력 |
%d | 이벤트 발생 날짜 출력 |
%n | 개행문자(\n) 출력 |
%M | 로깅이 발생한 method 이름 출력 |
%F | 로깅이 발생한 프로그램 파일명 출력 |
%l | 로깅이 발생한 caller 정보 출력 |
%L | 로깅이 발생한 caller 라인수 출력 |
%x | 로깅이 발생한 thread와 관련된 NDC 출력 |
%X | 로깅이 발생한 thread와 관련된 MDC 출력 |
% | % 출력 표시 |
%t | 쓰레드 이름 출력 |
2. log4j 설정
1. pom.xml에 두개의 dependency를 추가한다.
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-core-asl</artifactId>
<version>1.9.13</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.18.0</version>
</dependency>
2. src/main/resources 아래에 log4j2.xml 파일을 만들고 아래 내용을 입력한다.
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Properties>
<Property name="logNm">Spring Log4j2</Property>
<Property name="layoutPattern">%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p}\(${PID:- }\)[%t] [%logger{30}:%line] %msg%n</Property>
</Properties>
<Appenders>
<Console name="Console_Appender" target="SYSTEM_OUT">
<PatternLayout pattern="${layoutPattern}"/>
</Console>
<RollingFile name="File_Appender" fileName="logs/${logNm}.log" filePattern="logs/${logNm}_%d{yyyy-MM-dd}_%i.log.gz">
<PatternLayout pattern="${layoutPattern}"/>
<Policies>
<SizeBasedTriggeringPolicy size="1000KB"/>
<TimeBasedTriggeringPolicy interval="1"/>
</Policies>
<DefaultRolloverStrategy max="10" fileIndex="min"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="INFO" additivity="false">
<AppenderRef ref="Console_Appender"/>
<AppenderRef ref="File_Appender"/>
</Root>
<Logger name="org.springframework" level="INFO"
additivity="false">
<AppenderRef ref="Console_Appender" />
<AppenderRef ref="File_Appender"/>
</Logger>
<!--하단 name에 본인이 사용하는 package명으로 수정할 것-->
<Logger name="com.basic.eGovFrame" level="INFO" additivity="false">
<AppenderRef ref="Console_Appender" />
<AppenderRef ref="File_Appender"/>
</Logger>
<Logger name="org.springframework" level="INFO" additivity="false">
<AppenderRef ref="Console_Appender" />
</Logger>
</Loggers>
</Configuration>
3. log4jdbc-log4j2란?
Log4jdbc는 스프링에서 SQL문을 실행한 로그를 효과적이고 직관적으로 볼 수 있도록 해주는 라이브러리이다.
log4jdbc를 사용하면 쿼리 로그가 아래와 같이 보이게 된다.
4. log4jdbc-log4j2 설정
1. pom.xml에 아래 dependency를 추가한다.
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4</artifactId>
<version>1.16</version>
</dependency>
2. resources 폴더 밑에 log4jdbc.log4j2.properties 파일 생성 후 아래 내용을 입력한다.
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.drivers=org.mariadb.jdbc.Driver
3. resources 폴더 밑에 db.properties 파일 생성 후 아래 내용을 입력한다.
예시
#local
url=jdbc:log4jdbc:mariadb://localhost:3306/egovframe?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true
username=kje
password=qwer1234
4. context-datasource.xml에 아래 내용을 입력한다.
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.0.xsd">
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>classpath:db.properties</value>
</property>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="net.sf.log4jdbc.sql.jdbcapi.DriverSpy" />
<property name="url" value="${url}" />
<property name="username" value="${username}" />
<property name="password" value="${password}" />
</bean>
</beans>
5. 프로젝트 우클릭 > maven > update project 해준다.
결과
※ 본문의 예제 소스
'전자정부표준프레임워크(eGovFrame)' 카테고리의 다른 글
[eGovFrame] MariaDB 연결 (0) | 2023.01.17 |
---|---|
[eGovFrame] 설치/새 프로젝트 만들기/실행 (0) | 2023.01.12 |