Nos aplicativos Java, os logs geralmente são divididos nos 5 níveis seguintes:
O Spring Boot usa o log do Comons do Apache como a estrutura de registro interno. É apenas uma interface de log. Em aplicativos reais, é necessário especificar a implementação de log correspondente para esta interface.
A implementação de log padrão do Springbt é o Logging Java Util, que é um pacote de log embutido no JDK. Além disso, o Springbt também suporta implementações de log muito populares, como log4j e logback.
As implementações de log acima são referidas coletivamente como estruturas de log
Vamos praticar abaixo!
Usando o plug -in de login de inicialização da primavera
Primeiro, adicione configuração ao arquivo Application.Properties:
logging.level.root = info
O código do controlador é o seguinte:
pacote com.hansonwang99.Controller; importar com.hansonwang99.k8sResctrLapplication; importar org.slf4j.logger; importar org.slf4j.loggerfactory; importação org.springframework.web.bind.annotation.getMapping; importar; org.springframework.web.bind.annotation.requestmapping; importar org.springframework.web.bind.annotation.restcontroller;@restcontroller@requestmapping ("testlogging") public LoggerFactory.getLogger (K8SRESCTRLAPPLICATION.CLASS); @GetMapping ("/hello") public string hello () {Logger.info ("Logging de teste ..."); retornar "Olá"; }}Resultados de execução
Como o nível de log está definido como informações, o log de informações contendo informações e acima será impresso
Como pode ser visto aqui, a maioria dos registros de informações vem da própria estrutura Springbt. Se quisermos bloqueá -los, podemos definir o nível de log como erro primeiro, para que as informações da informação da estrutura em si não sejam impressas. Em seguida, defina o pacote específico no aplicativo como um log de nível de depuração, para que você possa ver apenas os logs do nível de depuração no pacote com o qual está preocupado.
Controla o nível de log de um pacote específico
Altere a configuração no Application.yml
Registro: Nível: Raiz: Erro com.hansonwang99.Controller: Debug
É óbvio que o nível de log da raiz está definido como erro e, em seguida, o nível de log do pacote com.hansonwang99.controller está definido como depuração, o que significa: primeiro proibindo todas as configurações e depois permitindo configurações individuais.
Código do controlador
pacote com.hansonwang99.Controller; importar org.slf4j.logger; importar org.slf4j.loggerfactory; importar org.springframework.web.bind.annotation.getMapping; importação; org.springframework.web.bind.annotation.restcontroller;@RestController@requestmapping ("/testLogging") public class LoggingTestController {private logger logger = loggerFactory.getLogger (thisgetClass ()); @GetMapping ("/hello") public string hello () {Logger.info ("Logging de teste ..."); retornar "Olá"; }}Resultados de execução
Pode-se observar que a estrutura em si tem todos os logs de nível de informações ocultos e os logs no pacote especificado são impressos com sucesso de acordo com o nível.
Logs de saída para um arquivo
Registro: Nível: Raiz: Erro com.hansonwang99.Controller: Arquivo de Debug: $ {user.home} /logs/hello.logResultados de execução
Usando o log de inicialização do Spring, descobrimos que, embora o log tenha sido emitido para o arquivo, uma cópia ainda será impressa no console. Descobrimos que usar org.slf4j.Logger não pode resolver este problema
Estrutura de log4j de log4j integrado
Adicione dependências em pom.xml
<Depencency> <PuerpId> org.springframework.boot </frugiD> <ArtifactId> Spring-boot-Starter-Web </ArtifactId> <clusions> <clustrogus> <puperid> org.springframework.boot </frugid> <Artifactid> Spring-B Oot-Starter-Logging </stifactId> </clusion> </clusions> </dependency> <pendence> <puerpyid> org.springframework.boot </foupid> <sutifactId> spring-boot-starter-log4j2 </stifactId> </pendendence>
Adicione o arquivo log4j2.xml no diretório de recursos, o conteúdo é o seguinte:
<? xml versão = "1.0" coding = "utf -8"?> <frifiguration> <pêndores> <file name = "file" filename = "$ {sys: user.home} /logs/hello2.log"> <padrão Pattern = " %d {hh: mm: ss, ss, ss -ss"> <padronyout Pattern = " %d {hh: mm: ss, ss, ss}"> <padrão </pênders> <ggergers> <root nível = "error"> <appender-ref ref = "file"/> </root> <logger name = "com.hansonwang99.Controller" Level = "Debug"/> </loggers> </figuration>O outro código permanece o mesmo
A execução do programa constatou que o console não possui saída de log e há conteúdo no arquivo hello2.log, que está de acordo com nossas expectativas:
E o formato de log corresponde à definição em pattern="%d{HH:mm:ss,SSS} %p %c (%L) - %m%n" formato
Log4J leva mais prática
Configuração do POM.XML:
<Depencency> <PuerpId> org.springframework.boot </frugiD> <ArtifactId> Spring-boot-Starter-Web </ArtifactId> <clusions> <clustrogus> <puperid> org.springframework.boot </frugid> <Artifactid> Spring-B Oot-Starter-Logging </stifactId> </clusion> </clusions> </dependency> <pendence> <puerpyid> org.springframework.boot </foupid> <sutifactId> spring-boot-starter-log4j2 </stifactId> </pendendence>
Log4j2.xml Configuração
<? xml versão = "1.0" coding = "utf-8"?> <status da configuração = "warn"> <Perts> <propriedade name = "App_name"> Springboot-web </propriedade> <propriedades = "log_path"> logs/$ {App_name} </constitui "</" <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 = "Warn" <MatchFilter = "Info"/> <Thresholdfilter = "Warn" OnMatch = " padrão = "[%d] [%t] [%p] [%c:%l]%m%n" /> <policies> <!-arquivos diários de arquivamento-> <timebasedtriggeringpolicy interval = "1" modulate = "true" /> <!-limitar um tamanho único-> <tamanho do tamanho do tamanho do tamanho <! <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 = "Erro" OnMatch = " padrão = "[%d] [%t] [%p] [%c:%l]%m%n" /> <policies> <!-arquivos diários de arquivamento-> <timebasedtriggeringpolicy interval = "1" modulate = "true" /> <!-limitar um tamanho único-> <tamanho do tamanho do tamanho do tamanho <! <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"> <limiarfilter nível <bestones = "error" /> <padronyout padrony = "[%d] [%t] [%p. <TimeBasedTriggeringPolicy interval = "1" modulate = "true"/> <!-Limite o tamanho do arquivo único-> <sizeBasedTriggeringPolicy size = "2 Mb"/> </políticas> <!-Limite o número de arquivos por dia-> <FAULTRATRAGEMSTRATYCELELEM> <! <! nível = "info"> <appender-ref ref = "console" /> <appender-ref refer = "rollingfileInfo" /> <appender-ref refer = "rollingfilewarn" /> <appender-ref ref = "rollingfileError" /> < /root> < /loggers> </sociguration>Código do controlador:
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 = logManager.getLogger (thisgetClass ()); @GetMapping ("/hello") public string hello () {for (int i = 0; i <10_0000; i ++) {logger.info ("Info Execute Index Method"); Logger.warn ("Método do índice de execução de aviso"); Logger.error ("Método do índice de execução de erro"); } retornar "meu primeiro aplicativo de trampolim"; }}Resultados de execução
Os logs serão armazenados em diferentes arquivos de acordo com diferentes níveis. Quando o tamanho do arquivo de log exceder 2M, vários arquivos serão compactados e armazenados. Recomenda-se ajustar o tamanho do arquivo de log do ambiente de produção para 20-50 MB.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.