No processo de desenvolvimento do projeto, os desenvolvedores estarão familiarizados com o log. Os logs podem registrar o rastreamento da operação do programa, fornecer informações importantes na operação do software, nos ajudar na solução e localização de problemas, otimizar o desempenho do programa e monitorar o status da operação do programa.
O spring-boot-starter do projeto SpringBoot refere-se a spring-boot-starter-logging por padrão, onde a camada inferior usa a estrutura de logback de log e a função de log pode ser usada com configuração zero por padrão.
Antes de explicar a configuração do log do springboot, vamos falar brevemente sobre o conhecimento básico dos logs JAVA.
Navegação neste artigo
Tempo de registro
- Registre os parâmetros de inicialização do programa e julgue o status de execução do programa
- O código lança uma exceção e registra o estado anormal do programa
- O processo de negócios não corresponde ao resultado esperado e o estado anormal de negócios é registrado
- Negócio central do sistema, operação da autoridade central. Por exemplo, os registros de operação, como login e pagamento, geralmente são incluídos no banco de dados para análise.
Estrutura de registro Java
Para estruturas de log, geralmente vemos substantivos como log4j e logback, e também encontramos conflitos entre nosso próprio projeto e a biblioteca de log de um jar de terceiros.
A primeira vez que você entra em contato com eles, pode sentir que nuvens e névoas são incompreensíveis.Aqui está uma breve introdução ao relacionamento entre a estrutura de log Java. Razões históricas mais específicas, detalhes. Existem vários artigos na Internet que são muito bons, e vou anexá-los à sua própria compreensão de leitura:
- Saiba que existe um artigo acima: java log frame analysis
- Há um artigo no blog: Introdução ao Java Common Log Framework
Depois de ler o artigo acima, um breve resumo da estrutura de criação de log Java é dividido em 3 categorias:
- A implementação específica da estrutura de log Java: log4j1.x, JUL (Java Util Log), Logback, log4j2-core
- O objeto de fachada do framework de registro Java fornece apenas a interface, mas não a implementação específica: JCL (Commons Logging), SLF4J (The Simple Logging Facade for Java), log4j2-api
- Adaptador entre estruturas de registro Java, a fim de converter diferentes estruturas de registro: jcl-over-slf4j, slf4j-jcl, log4j-over-slf4j, slf4j-log4j12, etc.
Melhores práticas para a estrutura de registro (link de referência da fonte, aqui está apenas um trecho):
- Sempre use Log Facade em vez de Implementação de Log específica
- Adicione apenas uma dependência de implementação de log
- A dependência de implementação de log específico deve ser definida como opcional e usar o escopo de tempo de execução
- Se necessário, exclua as dependências de Impementação de Log em bibliotecas de terceiros dependentes
- Evite gerar registros desnecessários, e campos de registro desnecessários, como números de linha, afetam o desempenho do programa
Configuração de log SpringBoot
Dependência de log
Springboot usa a combinação de SLF4J + Logback para gravar logs por padrão, e você pode ver as dependências, então não precisamos introduzi-las.
configuração de log do springboot
logging:
level:
#包的日志级别
org.springframework.web: DEBUG
#自定义log信息
config: classpath:config/logback-spring.xml
pattern:
#控制台的日志输出格式
console: '%d{yyyy/MM/dd-HH:mm:ss} [%thread] %-5level %logger- %msg%n'
#文件的日志输出格式
file: '%d{yyyy/MM/dd-HH:mm} [%thread] %-5level %logger- %msg%n'
file:
#日志名称
name: app.log
#存储的路径
path: /var/log/
#存储的最大值
max-size: 50MB
#保存时间
max-history: 7
Configuração de log personalizado
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--获取变量名中关于日志存储的路径与存储名称-->
<springProperty scope="context" name="logPath" source="logging.file.path"/>
<springProperty scope="context" name="logName" source="logging.file.name"/>
<!--输出到控制台的appender-->
<appender name="Console"
class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>
%black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{1.}): %msg%n%throwable
</Pattern>
</layout>
</appender>
<!--输出到文件的appender-->
<appender name="RollingFile"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/${logName}</file>
<encoder
class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
</encoder>
<rollingPolicy
class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- rollover daily and when the file reaches 10 MegaBytes -->
<fileNamePattern>${LOGS}/archived/spring-boot-logger-%d{yyyy-MM-dd}.%i.log
</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
</appender>
<!--开发环境基本级别为DEBUG-->
<springProfile name="dev">
<root level="DEBUG">
<appender-ref ref="Console"/>
</root>
</springProfile>
<!--生产环境输入到文件中-->
<springProfile name="prod">
<root level="INFO">
<appender-ref ref="RollingFile"/>
</root>
</springProfile>
</configuration>
Mil milhas começam com um único passo. Aqui está o oitavo artigo da série de tutoriais SpringBoot. Todos os códigos-fonte do projeto podem ser baixados em meu GitHub .