ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] Log4j2 환경설정 , (+ log.info 에러 )
    Back-End/Spring Legacy 2023. 4. 4. 16:39

     

     

    STS 플러그인을 통해 생성된 프로젝트는 로그를 처리하기 위해 Log4j라이브러리를 이용하는데 2021년 Log4j 관련 보안 문제가 이슈화되면서 가능하면 Log4j대신 Log4j2를 이용하는 것을 권장하고 있다. 

     

    Spring Legacy Project를 생성하면 프로젝트에 존재하는 log4j.xml 파일은 Log4j를 위한 설정이므로 이를 제거한다. 

     

     

     

    📑 Log4j2 라이브러리 추가 

     

    pom.xml에서 Log4j와 관련된 <dependency> 항목을 찾아서 삭제한다. 삭제할때 slf4j 관련 라이브러리도 같이 삭제하도록 한다. 삭제 후 아래 라이브러리들을 추가해준다. 

     

     

    <!--Log4j2-->
    <dependency> 
         <groupId>org.apache.logging.log4j</groupId> 
         <artifactId>log4j-api</artifactId> 
         <version>2.18.0</version> 
     </dependency> 
     <dependency> 
         <groupId>org.apache.logging.log4j</groupId> 
         <artifactId>log4j-core</artifactId> 
         <version>2.18.0</version> 
     </dependency> 
    
     <dependency> 
         <groupId>org.apache.logging.log4j</groupId> 
         <artifactId>log4j-slf4j-impl</artifactId> 
         <version>2.18.0</version> 
     </dependency>

     

     

    📑 Log4j2.xml 파일 추가 

     

     

     

    설정은 아래와 같이 해준다. 

     

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration>
     
    <!-- Appender, Layout 설정 -->
    <Appenders>
     <Console name="console" target="SYSTEM_OUT">
     <PatternLayout pattern=" %-5level %c(%M:%L) - %m%n"/>
     </Console>
    </Appenders>
     
    <!-- Logger 설정 -->
    <Loggers>
     <Root level="INFO">
     <AppenderRef ref="console"/>
     </Root>
     <Logger name="org.zerock" level="INFO" additivity="false" >
     <AppenderRef ref="console"/>
     </Logger>
     
     <Logger name="org.springframework" level="DEBUG" additivity="false">
     <AppenderRef ref="console"/>
     </Logger>
    </Loggers>
     
    </Configuration>

     

     

    📑 Log4j2 설정 확인하기 

     

    Log4j2 설정이 잘 되었나 확인하기 위해 기존 HomeController 를 아래와 같이 변경한다. 

     

    package org.zerock.controller; 
    import java.text.DateFormat;
    import java.util.Date;
    import java.util.Locale;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    import lombok.Getter;
    import lombok.ToString;
    import lombok.extern.log4j.Log4j2; 
    /**
     * Handles requests for the application home page.
     */
    @Controller
    @Getter
    @ToString
    @Log4j2
    public class HomeController { 
     
     /**
     * Simply selects the home view to render by returning its name.
     */
     @RequestMapping(value = "/", method = RequestMethod.GET) 
     public String home(Locale locale, Model model) { 
     
    	 log.info("Log4j2.................."); 
    	 log.info("Welcome home! The client locale is {}.", locale); 
    	 
    	 
    	 
     
     
     Date date = new Date(); 
     DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, 
    locale); 
     
     String formattedDate = dateFormat.format(date); 
     
     model.addAttribute("serverTime", formattedDate ); 
     
     return "home"; 
     } 
     
    }

     

     

    이처럼 log가 뜨면 성공!! 

     

     


     

    근데... 내 프로젝트는 log.info가 인식되지 못 했다...

     

     

     

     

    검색을 해보니 메이븐 의존성 초기화가 있었다.

    필요한 라이브러리들은 pom.xml에 입력하면 자동으로 설치된다. 하지만 이런 의존성 관리는 가끔 제대로 파일을 다운로드 받지 못해 빌드 오류를 일으키기도 한다고한다. 따라서 그럴땐 한 번 다시 처음으로 초기화 한 후에 메이븐이 다시 다운로드 및 설치할 수 있도록 하는 작업이 필요하다. 

     

    아래 사용자 경로에 .m2 폴더가 있는데 여기 안 repository 폴더를 삭제 후 프로젝트에서 maven update를 실행하면 다시 필요한 라이브러리들이 다운받아지는 걸 확인할 수 있다. 이렇게 했을 때 해결했다는 분들도 계셨다. 

     

     

    하지만 위의 방법이 통하지 않았고 검색하다 lombok 설치에 문제가 있을 수 있다는 걸 발견했다. 

     

    https://wonisdaily.tistory.com/2

     

    [Lombok] 이클립스(Eclipse)에 롬북 라이브러리 설치하기

    롬북을 사용하면? 이클립스와 스프링 플러그인 만으로 스프링 개발은 가능하지만, Lombok을 이용하면 Java 개발 시 자주 사용하는 getter/setter, toString(), 생성자 등을 자동으로 생성해주므로 약간의

    wonisdaily.tistory.com

     

    다시 lombok을 다운받고 실행시켜 이클립스 경로를 잡아주었다. 롬북 설치 후 재시작했더니 해결 완료.

     

     

    반응형

    댓글

Designed by Tistory.