환경
NO Spring
Only JAVA7
현재 프로젝트는 java7 버전이다.
이번에 log4j 이슈 문제로 아무 버전이나 적용하면 안되서
어떤 버전을 적용해야 되나 찾아봤다.
Log4j 2.12.2 버전을 다운 받자!
- download link -
https://logging.apache.org/log4j/log4j-2.12.1/download.html
기존에 있었던 log4j-1.2.14.jar는 삭제한다.
1.추가파일
log4j-api-2.12.2.jar
log4j-core-2.12.2.jar
이 두가지 파일을 WEB-INF/lib에 추가시켜줬다.
Properties - Java Build Path - Libraries - ADD External JARs...
여기에도 추가시켜줬다.
name = PropertiesConfig
property.filename = log4j2.properties
appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%d{yyyy-MM-dd HH:mm:ss}] :: [%p] %c >> %m%n
appender.console.filter.threshold.type = ThresholdFilter
appender.console.filter.threshold.level = info
appender.rolling.type = RollingFile
appender.rolling.name = RollingFile
appender.rolling.fileName = ${filename}
appender.rolling.filePattern = ${filename}.%d{yyyy-MM-dd}.log
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = [%p], %d{yyyy-MM-dd HH:mm:ss} %c{1}:%L - %m%n
appender.rolling.policies.type = Policies
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 1
appender.rolling.policies.time.modulate = true
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.max = 3
appender.rolling.filter.threshold.type = ThresholdFilter
appender.rolling.filter.threshold.level = info
#for java code
#logger.rolling.name = Application
#logger.rolling.level = info
#logger.rolling.additivity = false
#logger.rolling.appenderRef.rolling.ref = RollingFile
rootLogger.level = all
rootLogger.appenderRefs = rolling, STDOUT
rootLogger.appenderRef.rolling.ref = RollingFile
rootLogger.appenderRef.stdout.ref = STDOUT
log4j2의 properties 형식이다.
2. log4j2.properties
log4j2.properties 파일을 src 하위에 넣어준다.
project - New - Source Folder 해서 새로운 폴더를 만들어서 넣어줘도 된다.
후자의 방법으로 한다면 Properties - Java Build Path - Source - Add Folder... 에서 경로를 잡아줘야한다.
* 기본 파일명규칙을 지켜야한다. [log4j2.xml, log4j2.properties, log4j2.json, log4j2.jsn, log4j2.yaml, log4j2.yml]
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
public class Test {
private static final Logger LOGGER = LogManager.getLogger(Test.class.getName());
public static void logTest() {
LOGGER.info("info");
LOGGER.error("error");
}
}
java에서 추가해서 사용하니 아주 잘 나온다.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="org.apache.logging.log4j.LogManager" %>
<%@ page import="org.apache.logging.log4j.Logger" %>
<%
Logger log = LogManager.getLogger(this.getClass());
log.info("test");
%>
문제는 jsp였는데 java code 넣는 부분이라고 해서 java와 똑같이 넣으면 안된다.
public static final을 지워주고
getLogger메서드에 this.getClass()를 넣어주면 된다.
[2022-03-31 16:42:41] :: [INFO] org.apache.jsp.test.test_jsp >> test
그럼 이렇게 잘나온다.
끝!
추가) properties 설정 or 옵션
로그레벨
FATAL > ERROR > WARN > INFO > DEBUG > TRACE
TRACE : 상세한 정보
DEBUG : 상세한 일반 정보
INFO : 일반 정보
WARN : 주의
ERROR : 일반에러
FETAL : 치명적인 에러
옵션
- %d : 로깅 이벤트가 일어난 날자(date)
- %p : 로깅 이벤트의 priority
- %t : 로깅 이벤트를 생성한 스레드 이름
- %c : 로깅 이벤트의 category
- %F : 로깅요청을 일으킨 파일 이름
- %L : 로깅요청을 일으킨 파일의 행번호
- %x : 로깅이벤트를 발생시킨 스레드에 관련된 내포검사항목
(Nested Diagnostic Context : NDC)을 출력
- %C : 로깅요청을 일으킨 호출자의 완전한 클래스이름
- %M : 로깅요청을 일으킨 메소드
- %m : 메세지
- %n : 플랫폼 독립적인 개행문자
- %l : 소스코드의 위치정보를 출력한다. %C. %M(%F:%L) 의 축약형
Ref
http://nirmalbalasooriya.blogspot.com/2015/06/log4j2-logging-on-jsp-in-tomcat-7.html
http://dveamer.github.io/java/Log4j2.html
https://isstory83.tistory.com/121
'Programming > java' 카테고리의 다른 글
[java] poi 라이브러리 - XWPF 워드파일 데이터 쓰고 가져오기 (0) | 2022.07.15 |
---|---|
[log4j2] log4j + mybatis 쿼리 로그 찍기 (0) | 2022.04.02 |
[java] fileUpload 파일 업로드 유틸 만들기 (0) | 2022.04.01 |
[java]FileUpload할때 내문서 경로 가져오기 (0) | 2022.03.29 |
proxy designe pattern (0) | 2022.01.26 |