Spring Boot 로그 프레임 워 크 실천

11150 단어 SpringBoot로그
자바 응용 프로그램 에서 로 그 는 일반적으로 다음 과 같은 5 단계 로 나 뉜 다.
  • ERROR 오류 정보
  • WARN 경고 메시지
  • INFO 일반 정보
  • DEBUG 디 버 깅 정보
  • TRACE 추적 정보
  • Spring Boot 는 아파 치 의 Commons Logging 을 내부 로그 프레임 워 크 로 사용 합 니 다.로그 인터페이스 일 뿐 실제 응용 프로그램 에서 해당 로 그 를 지정 해 야 합 니 다.
    SpringBt 의 기본 로그 구현 은 자바 Util Logging 이 며,JDK 가 자체 적 으로 가지 고 있 는 로그 패키지 입 니 다.또한 SpringBt 는 Log4J,Logback 같은 유행 하 는 로그 구현 도 지원 합 니 다.
    위 에 있 는 로 그 를 로그 프레임 워 크 라 고 통일 합 니 다.
    다음은 우리 가 실천 해 보 자!
    Spring Boot Logging 플러그 인 사용 하기
    우선 application.properties 파일 에 설정 을 추가 합 니 다:
    
    logging.level.root=INFO
    컨트롤 러 부분 코드 는 다음 과 같 습 니 다.
    
    package com.hansonwang99.controller;
    
    import com.hansonwang99.K8sresctrlApplication;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/testlogging")
    public class LoggingTestController {
     private static Logger logger = LoggerFactory.getLogger(K8sresctrlApplication.class);
     @GetMapping("/hello")
     public String hello() {
      logger.info("test logging...");
      return "hello";
     }
    }
    실행 결과

    로그 레벨 을 INFO 로 설정 하기 때문에 INFO 및 그 이상 의 레벨 을 포함 하 는 로그 정 보 를 출력 합 니 다.
    이 를 통 해 알 수 있 듯 이 대부분의 INFO 로 그 는 SpringBt 프레임 워 크 자체 에서 나 온 것 입 니 다.이 를 차단 하려 면 로그 단 계 를 모두 ERROR 로 설정 하면 프레임 워 크 자체 의 INFO 정보 가 인쇄 되 지 않 습 니 다.그 다음 에 응용 프로그램 에 있 는 특정한 가방 을 DEBUG 등급 의 로그 로 설정 하면 관심 있 는 가방 에 있 는 DEBUG 와 이상 등급 의 로그 만 볼 수 있 습 니 다.
    특정 가방 의 로그 단 계 를 제어 합 니 다.
    application.yml 에서 설정 변경
    
    logging:
     level:
     root: error
     com.hansonwang99.controller: debug
    루트 로그 단 계 를 ERROR 로 설정 한 다음com.hansonwang99.controller가방 의 로그 단 계 를 DEBUG 로 설정 한 것 이 분명 합 니 다.즉,모든 것 을 금지 하고 개별 설정 방법 을 허용 하 는 것 입 니 다.
    컨트롤 러 코드
    
    package com.hansonwang99.controller;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/testlogging")
    public class LoggingTestController {
     private Logger logger = LoggerFactory.getLogger(this.getClass());
     @GetMapping("/hello")
     public String hello() {
      logger.info("test logging...");
      return "hello";
     }
    }
    실행 결과

    프레임 워 크 자체 의 INFO 레벨 로 그 를 모두 숨 기 고 지정 한 가방 의 로 그 를 단계별 로 순조롭게 출력 하 는 것 을 볼 수 있 습 니 다.
    파일 에 로 그 를 출력 합 니 다.
    
    logging:
     level:
     root: error
     com.hansonwang99.controller: debug
     file: ${user.home}/logs/hello.log
    실행 결과


    Spring Boot Logging 을 사용 하면 로그 가 파일 에 출력 되 었 지만 콘 솔 에 인쇄 되 어 있 습 니 다.org.slf4j.Logger로 는 이 문 제 를 해결 할 수 없습니다.
     
    통합 Log4J 로그 프레임 워 크
    pom.xml 에 의존 추가
    
    <dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    			<exclusions>
    				<exclusion>
    					<groupId>org.springframework.boot</groupId>
    					<artifactId>spring-boot-starter-logging</artifactId>
    				</exclusion>
    			</exclusions>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-log4j2</artifactId>
    		</dependency>
    resources 디 렉 터 리 에log4j2.xml파일 을 추가 합 니 다.내용 은 다음 과 같 습 니 다.
    
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
    
     <appenders>
      <File name="file" fileName="${sys:user.home}/logs/hello2.log">
       <PatternLayout pattern="%d{HH:mm:ss,SSS} %p %c (%L) - %m%n"/>
      </File>
     </appenders>
    
     <loggers>
    
      <root level="ERROR">
       <appender-ref ref="file"/>
      </root>
      <logger name="com.hansonwang99.controller" level="DEBUG" />
     </loggers>
    
    </configuration>
    다른 코드 는 변 하지 않 습 니 다.
    실행 프로그램 은 콘 솔 에 로그 출력 이 없 는 것 을 발 견 했 습 니 다.hello 2.log 파일 에 내용 이 있 습 니 다.이것 은 우리 의 기대 에 부합 합 니 다.



    또한 로그 형식 은pattern="%d{HH:mm:ss,SSS} %p %c (%L) - %m%n"형식 과 일치 합 니 다.
    Log4J 더 실천
    pom.xml 설정:
    
    <dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    			<exclusions>
    				<exclusion>
    					<groupId>org.springframework.boot</groupId>
    					<artifactId>spring-boot-starter-logging</artifactId>
    				</exclusion>
    			</exclusions>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-log4j2</artifactId>
    		</dependency>
    log4j2.xml 설정
    
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration status="warn">
     <properties>
    
      <Property name="app_name">springboot-web</Property>
      <Property name="log_path">logs/${app_name}</Property>
    
     </properties>
     <appenders>
      <console name="Console" target="SYSTEM_OUT">
       <PatternLayout pattern="[%d][%t][%p][%l] %m%n" />
      </console>
    
      <RollingFile name="RollingFileInfo" fileName="${log_path}/info.log"
          filePattern="${log_path}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz">
       <Filters>
        <ThresholdFilter level="INFO" />
        <ThresholdFilter level="WARN" onMatch="DENY"
             onMismatch="NEUTRAL" />
       </Filters>
       <PatternLayout pattern="[%d][%t][%p][%c:%L] %m%n" />
       <Policies>
        <!--         -->
        <TimeBasedTriggeringPolicy interval="1" modulate="true" />
        <!--          -->
        <SizeBasedTriggeringPolicy size="2 MB" />
       </Policies>
       <!--          -->
       <DefaultRolloverStrategy compressionLevel="0" max="10"/>
      </RollingFile>
    
      <RollingFile name="RollingFileWarn" fileName="${log_path}/warn.log"
          filePattern="${log_path}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log.gz">
       <Filters>
        <ThresholdFilter level="WARN" />
        <ThresholdFilter level="ERROR" onMatch="DENY"
             onMismatch="NEUTRAL" />
       </Filters>
       <PatternLayout pattern="[%d][%t][%p][%c:%L] %m%n" />
       <Policies>
        <!--         -->
        <TimeBasedTriggeringPolicy interval="1" modulate="true" />
        <!--          -->
        <SizeBasedTriggeringPolicy size="2 MB" />
       </Policies>
       <!--          -->
       <DefaultRolloverStrategy compressionLevel="0" max="10"/>
      </RollingFile>
    
      <RollingFile name="RollingFileError" fileName="${log_path}/error.log"
          filePattern="${log_path}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz">
       <ThresholdFilter level="ERROR" />
       <PatternLayout pattern="[%d][%t][%p][%c:%L] %m%n" />
       <Policies>
        <!--         -->
        <TimeBasedTriggeringPolicy interval="1" modulate="true" />
        <!--          -->
        <SizeBasedTriggeringPolicy size="2 MB" />
       </Policies>
       <!--          -->
       <DefaultRolloverStrategy compressionLevel="0" max="10"/>
      </RollingFile>
    
     </appenders>
    
     <loggers>
    
    
      <root level="info">
       <appender-ref ref="Console" />
       <appender-ref ref="RollingFileInfo" />
       <appender-ref ref="RollingFileWarn" />
       <appender-ref ref="RollingFileError" />
      </root>
    
     </loggers>
    
    </configuration>
    컨트롤 러 코드:
    
    package com.hansonwang99.controller;
    
    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RequestMapping("/testlogging")
    public class LoggingTestController {
     private final Logger logger = LogManager.getLogger(this.getClass());
     @GetMapping("/hello")
     public String hello() {
      for(int i=0;i<10_0000;i++){
       logger.info("info execute index method");
       logger.warn("warn execute index method");
       logger.error("error execute index method");
      }
      return "My First SpringBoot Application";
     }
    }
    실행 결과



    로 그 는 레벨 에 따라 다른 파일 에 저 장 됩 니 다.로그 파일 크기 가 2M 을 넘 으 면 여러 파일 로 압축 되 어 저 장 됩 니 다.생산 환경의 로그 파일 크기 는 20-50MB 로 조정 하 는 것 을 권장 합 니 다.
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기