Java 응용 프로그램에서 로그는 일반적으로 다음 5 가지 레벨로 나뉩니다.
Spring Boot는 Apache의 Commons Logging을 내부 로깅 프레임 워크로 사용합니다. 로그 인터페이스 일뿐입니다. 실제 애플리케이션에서는이 인터페이스의 해당 로그 구현을 지정해야합니다.
SpringBT의 기본 로그 구현은 Java Util Logging이며 JDK에 내장 된 로그 패키지입니다. 또한 SpringBT는 Log4J 및 Logback과 같은 매우 인기있는 로그 구현을 지원합니다.
위의 로그 구현은 집합 적으로 로그 프레임 워크 라고합니다.
아래에서 연습합시다!
스프링 부트 로깅 플러그인 사용
먼저 Application.Properties 파일에 구성 추가 :
logging.level.root = info
컨트롤러 코드는 다음과 같습니다.
패키지 com.hansonwang99.controller; import com.hansonwang99.k8sresctrlapplication; import org.slf4j.logger; import org.slf4j.loggerfactory; import org.springframework.web.bind.annotation.getmapping; 가져 오기; org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.bind.annotation.restcontroller;@restcontroller@restontroller@restontroller ( "/testLogging") public loggingStattScontroller = loggerger.getLoggerfication.getLoggerfication (k8sresctrass); @getMapping ( "/hello") public String hello () {logger.info ( "테스트 로깅 ..."); "안녕하세요"를 반환합니다. }}실행 결과
로그 레벨이 정보로 설정되므로 정보가 포함 된 로그 정보 이상으로 인쇄됩니다.
여기에서 볼 수 있듯이 대부분의 정보 로그는 SpringBT 프레임 워크 자체에서 나옵니다. 차단하려면 먼저 로그 레벨을 오류로 설정하여 프레임 워크 자체의 정보 정보가 인쇄되지 않도록합니다. 그런 다음 응용 프로그램의 특정 패키지를 디버그 레벨 로그로 설정하여 우려하는 패키지의 디버그 레벨 로그 만 볼 수 있습니다.
특정 패키지의 로그 레벨을 제어합니다
Application.yml에서 구성을 변경하십시오
로깅 : 레벨 : 루트 : 오류 com.hansonwang99. Controller : Debug
루트 로그 레벨이 오류로 설정된 다음 com.hansonwang99.controller 패키지의 로그 레벨이 디버그로 설정되어 있습니다. 즉, 먼저 모든 설정을 금지 한 다음 개별 설정을 허용합니다.
컨트롤러 코드
패키지 com.hansonwang99. controller; import org.slf4j.logger; import org.slf4j.loggerfactory; import org.sprameframework.web.bind.annotation.getmapping; import org.spramework.web.bind.annotation.requestmapping; import; org.springframework.web.bind.annotation.restcontroller;@restcontroller@restontroller ( "/testlogging") public class loggingtestcontroller {private logger = loggerfactory.getLogger (this.getClass ()); @getMapping ( "/hello") public String hello () {logger.info ( "테스트 로깅 ..."); "안녕하세요"를 반환합니다. }}실행 결과
프레임 워크 자체에 모든 인포 레벨 로그가 숨겨져 있으며 지정된 패키지의 로그는 레벨에 따라 성공적으로 인쇄된다는 것을 알 수 있습니다.
출력 로그가 파일에 로그를냅니다
로깅 : 레벨 : 루트 : 오류 com.hansonwang99.controller : 디버그 파일 : $ {user.home} /logs/hello.log실행 결과
스프링 부트 로깅을 사용하면 로그가 파일에 출력되었지만 콘솔에 사본이 여전히 인쇄된다는 것을 발견했습니다. org.slf4j.Logger 사용하면이 문제를 해결할 수 없습니다
통합 로그 4J 로그 프레임 워크
pom.xml에 종속성을 추가하십시오
<pectionency> <groupId> org.springframework.boot </groupid> <artifactid> 스프링-부트-스타터-web </artifactid> <제외> <pexclusion> <groupid> org.springframework.boot </groupid> <artifactid> spring-b Oot-starter-logging </artifactid> </exclusion> </exclusions> </depectency> <pectomency> <groupid> org.springframework.boot </groupId> <atifactId> Spring-Boot-Starter-Log4J2 </artifactid> </dependency>
리소스 디렉토리에 log4j2.xml 파일을 추가하면 내용은 다음과 같습니다.
<? xml version = "1.0"encoding = "utf -8"?> <configuration> <부록> <file name = "file"filename = "$ {sys : user.home} /logs/hello2.log"> <PatternLayout Pattern = " %d {hh : mm : ss, ss} %c ( %l) - %m %l). </부록> <gogers> <root level = "error"> <appender-ref ref = "file"/> </root> <logger name = "com.hansonwang99.controller"level = "debug"/</loggers> </configuration>다른 코드는 동일하게 유지됩니다
프로그램을 실행하면 콘솔에 로그 출력이 없으며 Hello2.Log 파일에 내용이 있음을 발견했습니다.
그리고 로그 형식은 pattern="%d{HH:mm:ss,SSS} %p %c (%L) - %m%n" 형식의 정의와 일치합니다.
Log4J는 추가 연습을합니다
pom.xml 구성 :
<pectionency> <groupId> org.springframework.boot </groupid> <artifactid> 스프링-부트-스타터-web </artifactid> <제외> <pexclusion> <groupid> org.springframework.boot </groupid> <artifactid> spring-b Oot-starter-logging </artifactid> </exclusion> </exclusions> </depectency> <pectomency> <groupid> org.springframework.boot </groupId> <atifactId> 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 name = "log_path"> logs/$ {app_name} </properties> <appenders> <console ""systole "" "systole" "systole" "systole" "systole" "> <PatternLayout Pattern = "[%d] [%t] [%p] [%l]%m%n"/> </console> <RollingFile name = "RollingFileInfo"filename = "$ {log_path} /info.log" FilePattern = "$ {log_path}/$$ {날짜 : yyyy-mm}/info-%d {yyyy-mm-dd}-%i.log.gz"> <filters> <thresholdfilter level = "info"/> <thresholdfilter level = "warn"onmatch deNy ""/> </filishoup. 패턴 = "[%d] [%t] [%p] [%c :%l]%m%n" /> <정책> <!-매일 파일 아카이브-> <timebasedtriggeringpolicy interval = "1"modulate = "true" /<!-단일 파일 크기 제한-> <sizebasedtriggeringpolicy size = "2 MB" /> <! <! <! <defaultrolloverStrategy compressionlevel = "0"max = "10"/> </rollingfile> <RollingFile name = "RollingFileWarn"filename = "$ {log_path} /warn.log" FilePattern = "$ {log_path}/$$ {날짜 : yyyy-mm}/warn-%d {yyyy-mm-dd}-%i.log.gz"> <filters> <thresholdfilter level = "warn"/> <thresholdfilter level = "error"onmistath = "inmistath =" "/> </filather" 패턴 = "[%d] [%t] [%p] [%c :%l]%m%n" /> <정책> <!-매일 파일 아카이브-> <timebasedtriggeringpolicy interval = "1"modulate = "true" /<!-단일 파일 크기 제한-> <sizebasedtriggeringpolicy size = "2 MB" /> <! <! <! <defaultrolloverStrategy compressionlevel = "0"max = "10"/> </rollingfile> <RollingFile name = "RollingFileError"filename = "$ {log_path} /error.log" FilePattern = "$ {log_path} /$$ {날짜 : yyyy-mm} /error-%d {yyyy-mm-dd}-%i.log.gz"> <thresholdfilter level = "error" /> <patternlayout pattern = "[%t] [%p] [%c :%l]-%n" /> <! <timebasedtriggeringpolicy interval = "1"modulate = "true"/> <!-단일 파일 크기 제한-> <sizebasedtrigeringpolicy size = "2 mb"/> </policies> <!-하루에 파일 수를 제한-> <defaultrolloverStrategy compressionLevel = "0"max = "10"/> </rollingfile> level = "info"> <appender-ref ref = "콘솔" /> <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.spramframework.web.bind.annotation.getMapping; import org.springframework.web.bind.antotation. requestmapp org.springframework.web.bind.annotation.restcontroller;@restController@restontroller@restontMapping ( "/testLogging") public class loggingTestController {private final 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 메서드"); logger.error ( "오류 실행 색인 메소드"); } "첫 번째 스프링 부츠 응용 프로그램"을 반환합니다. }}실행 결과
로그는 다른 레벨에 따라 다른 파일에 저장됩니다. 로그 파일 크기가 2m를 초과하면 여러 파일이 압축되어 저장됩니다. 생산 환경의 로그 파일 크기를 20-50MB로 조정하는 것이 좋습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.