1. pom.xml
legacy project 에서는 기본적으로 slf4j & log4j 1.2.x 를 위주로 로깅(logging) 시스템이 구성되어 있습니다. 그러나 log4j 1.2.x 가 단종되고 자연스럽게 log4j2로 이관되면서 로깅 시스템도 log4j2로 재편되었습니다. 그러므로 아래와 같이 log4j 1.2.x에 관한 라이브러리 의존성(dependecy) 정보를 배제시키고 그 대신 log4j2 와 slf4j로 구성된 로깅 시스템을 구성할 수 있습니다. 게다가 log4jdbc 라는 DB 전문 로깅 시스템도 덧붙여서 구성할 수 있습니다. 다만 사용시 옵션을 잘못 사용하면 로깅 정보가 "폭발적으로" 증가할 수 있으므로 옵션 정보를 잘 조정하여 시스템에 맞는 정보를 구성하면 되겠습니다.
<!-- Logging -->
<!-- Slf4J -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<!-- log4j2 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.17.1</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.17.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.17.1</version>
</dependency>
<!--
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
<exclusions>
<exclusion>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</exclusion>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
<scope>runtime</scope>
</dependency>
-->
2. log4j2 : log4j2.xml
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<!--
######## log4j pattern(패턴) ##########
%p : 로그 레벨(debug, info, warn, error, fatal)의 priority(디버깅시 출력 우선권)가 출력됨.
%m : 로그 내용이 출력.
%d : 로그 이벤트가 발생한 시간을 기록.
ex) %d{HH:mm:ss, SSS}, %d{yyyy MMM dd HH:mm:ss, SSS}
: Java의 SimpleDateFormat의 클래스에 따른 포맷(format) 적용
- %d{ABSOLUTE}
- %d{DATE}
- %d{ISO8601}
%t : 로그 이벤트가 발생된 스레드(thread)명을 출력.
%% : % 표시 출력.
%n : 플랫폼 종속적인 개행문자(줄바꿈)가 출력.
%c : 카테고리(category)를 표시.
ex) 카테고리가 a.b.c 처럼 되어있다면 %c{2}는 b.c가 출력.
%C : 클래스명(class)을 표시.
ex) 만약 클래스의 패키지 구조가 com.javateam.project.DemoClass 라고 한다면
%C{2}는 project.DemoClass 가 출력됨.
%F : 로그가 발생한 프로그램 파일(File)명.
%l : 로그가 발생한 호출자(caller)의 정보.
%L : 로그가 발생한 호출자(caller)의 라인수(line)를 나타냅니다
%M : 로그가 발생한 메서드(method) 이름을 나타냅니다.
%r : 프로그램 시작 이후 부터 로그가 발생한 시점의 시간(milliseconds : 밀리초)
%x : 로그가 발생한 스레드(thread)와 관련된 NDC(nested diagnostic context)를 출력.
%X : 로그가 발생한 스레드(thread)와 관련된 MDC(mapped diagnostic context)를 출력. %X{key} 형태.
참고) NDC & MDC : https://cwiki.apache.org/confluence/display/LOGGINGLOG4J/NDCvsMDC
http://egloos.zum.com/charmpa/v/2543451
- 공백(whitespace) 패딩 관련
%5p : 우측 정렬로 로그 레벨을 남김. 로그 레벨이 5글자가 안되면 왼쪽에 공백을 추가하여 5글자 맞춤.
%-5p : 좌측 정렬.
-->
<Properties>
<!-- <Property name="LOG_PATH" value="E:\lsh\log\spring\test" /> -->
<Property name="LOG_PATH" value="로그 경로" />
<Property name="layoutPattern">
%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5p] [%C] [%t] -- %m%n
</Property>
</Properties>
<Appenders>
<Console name="ConsoleAppender" target="SYSTEM_OUT">
<PatternLayout pattern="${layoutPattern}" />
</Console>
<RollingFile name="FileAppender"
fileName="${LOG_PATH}/log4j2_test.log"
filePattern="${LOG_PATH}/log4j2_test_%d{yyyy-MM-dd}_%i.log">
<PatternLayout pattern="${layoutPattern}"/>
<Policies>
<SizeBasedTriggeringPolicy size="50KB"/>
<TimeBasedTriggeringPolicy interval="1"/>
</Policies>
<DefaultRolloverStrategy max="10" fileIndex="min"/>
</RollingFile>
</Appenders>
<Loggers>
<Logger name="com.javateam.프로젝트 contextPath.test"
level="INFO"
additivity="false">
<AppenderRef ref="ConsoleAppender"/>
<AppenderRef ref="FileAppender"/>
</Logger>
<Root level="INFO" additivity="false">
<AppenderRef ref="ConsoleAppender" />
<AppenderRef ref="FileAppender"/>
</Root>
</Loggers>
</Configuration>
중요) log4J 보안
문제 관련 기사들 :
- https://www.itworld.co.kr/news/219729
- https://www.itworld.co.kr/news/219499
- https://www.itworld.co.kr/news/219809
기존의 log4j.xml 파일이 있다면 그것을 삭제하고 아래와 같이 파일을 새로 생성하여 구성합니다.
- site : https://logging.apache.org/log4j/log4j-2.17.1/manual/configuration.html
- 추천 링크) https://velog.io/@bread_dd/Log4j-2-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0
'Spring' 카테고리의 다른 글
List 타입 매핑 (0) | 2022.08.05 |
---|---|
AOP 01 (0) | 2022.07.29 |
제어의 역행(역전) : IoC(DI) (0) | 2022.07.25 |
STS IoC컨테이너 (0) | 2022.07.25 |
프레임워크 개념 (0) | 2022.07.25 |