개발자의 오르막

[Log4j 1.2.16-ver Json Layout 적용기 #01] 로그 개선 방향 선정 본문

Java

[Log4j 1.2.16-ver Json Layout 적용기 #01] 로그 개선 방향 선정

계단 2022. 7. 4. 18:43

 

회사에서 log4j , String 형태로 출력하던 로그에서 특정 부분을 JSON 형태로 새로운 파일에 출력하기를 원하는 요구사항이 있었다.

요구사항

  • 신규파일
  • format : JSON
  • 파일을 플랫폼에 등록하는 일련의 과정 - 진행 상태 모니터링
  • 오류 발생 시 오류를 확인에 필요한 로그

 

프로젝트 SPEC

  • JAVA 1.7
  • log4j 1.2.16

 

결론부터 말하자면 log4j1.2.16 Version 만으로는 Json Format 지원이 어렵다.

A) log4j 라이브러리 버전을 2.x.x Version 으로 올리기

B) logstash 와 같은 다른 라이브러리를 추가하여 Json Format 을 지원하기

 

 

따라서 A안과 B안이 있는데, 현재 회사의 프로젝트는 미들웨어 App 으로 여러 서버에서 동작하고 있기 때문에, 적합한 대안을 근거를 통해 선택해야 한다.

 

 

 

A안 )  Log4j-1.2.16 version -> Log4j-2.12.4 version 으로 버전 업그레이드

로그 라이브러리 Version 선정 이유

  • 현재 log4j 1.x.x 지원은 종료된 상태로 log4j 2.x.x 로 버전을 올리기를 권장
  • log4j 2.12.4 는 log4j 의 보안취약점이 보완된 버전
  • Java 7 Version 지원되는 마지막 log4j Version
  • Json Format 로깅을 지원

 

아무래도 Json Format 을 Log4j-2.12.4 version 에서도 지원하니, 기존의 지원 종료된 라이브러리에서 탈피할 수 있는 장점이 있다.

 

log4j Version 1점 대에서 2점대로 이관작업이 필요함

  • log4j 의 로거와 log4j2 의 로거는 호환된다.
    • getLogger 가 정의한 클래스명만 다를 뿐 getLogger 로 얻어진 인스턴스로 동일하게 재사용이 가능
    • PropertyConfigurator 라는 클래스는 2버전으로 없어지고, xml 파일로 설정값을 읽어들이는 것으로 변경됨
  • log4j.properties log4j.properties 에서 log4j2.xml 로 마이그레이션 작업이 필요함

 

 

라이브러리 교체 소요

  • 현재 log4j 1.2.16 version 에 사용되는 jar 파일
 log4j-1.2.16  slf4j-api-1.6.1.jar  slf4j-log4j12-1.6.1.jar
 jackson-databind-2.3.2.jar  jackson-core-2.3.2.jar  jackson-annotations-2.3.0.jar

 

  • 교체 소요 라이브러리
 log4j-core.2.12.4.jar  log4j-api-2.12.4.jar  log4j-slf4j-impl-2.12.4.jar
 jackson-databind-2.12.3.jar  jackson-annotation-2.12.3.jar  jackson-core-2.12.3.jar

 

 

B안 ) Logstash - jsonevent-layout

Logstash 의 Jsonevent-layout 이란?

Logstash 의 jsonevent-layout 은 log4j를 위한 json Layout Format 을 지원하는 라이브러리이다.

log4j 에서는 로그 레이아웃을 지원하기 위해 Appender 형식을 사용하는데, Jsonevent-layout 은 log4j 의 Appender 를 커스텀하여 지원한다.

 

 

추가 라이브러리

 jsonevent-layout-1.7.jar  json-smart-2.3.jar  asm-1.0.2.jar  common-lang-2.6.jar

 

 

 

 

 

2개의 안을 검토 결과, log4j 의 버전도 1.2.16 임으로, 권장사항에 따라 Java 7 에 호환되는 2.12.4 Version 으로 올리는 것으로 결정

 

Comments