Spring Boot 로그 프레임 워 크 실천
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 로 조정 하 는 것 을 권장 합 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.