Información básica
Registro : es la capacidad de describir con precisión y precisión la situación que ocurre en el estado de ejecución del sistema (tiempo de espera de conexión, operación del usuario, lanzamiento de excepciones, etc.);
Marco de registro : integra un conjunto de herramientas que puede estandarizar uniformemente la información de registro y producción.
Ventajas del logback
¿Cuáles son las ventajas del marco Logback? En primer lugar, tenemos que entender qué me puede ayudar a hacer el marco.
-
Ruta de salida personalizada, fácil mantenimiento posterior (conveniente para los socios de operación y mantenimiento)
能够将日志信息存储到本地文件或存储到数据库中去,而且根据滚动策略设置一天一个文件
-
Personalice el formato de salida del registro según sus preferencias
可以通过配置文件修改日志文件的具体内容,在不改变原有业务代码的情况下改变输出格式,方便调试
-
Lleve consigo la información del contexto del registro
上下文中包含着时间戳、类的所在路径、所占用的堆栈信息和占用的线程等等
-
Puede elegir qué generar en tiempo de ejecución
运行无误的时候,我们只在乎返回的运行信息;运行出错的时候,选择返回错误信息
-
Configuración conveniente y alto rendimiento
框架与业务代码耦合小,正常业务之外的审计和运维需求,与系统性能无关
Configuración del marco
Hay dos esquemas de configuración comunes para el logback:
- Configure en application.properties/application.yml que viene con el proyecto SpringBoot (esta configuración es una configuración simple y SpringBoot se ha integrado).
Esto generalmente es adecuado para proyectos de aprendizaje personal y se puede recomendar para un desarrollo rápido.
- Cree un archivo de configuración logback.xml por separado en el archivo de recursos para una configuración más compleja. (Recomendado, la información de configuración es suficientemente detallada)
Código general
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="300 seconds" debug="false">
<!-- 定义参数参数 -->
<!-- TRACE<DEBUG<INFO<WRAN<ERROR -->
<property name="log.level" value="debug"/>
<property name="log.maxHistory" value="30"/>
<property name="log.filePath" value="E:/study"/>
<property name="log.pattern"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n"/>
<!-- 控制台设置 -->
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- DEBUG -->
<appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路径 -->
<file>${log.filePath}/logs/debug.log</file>
<!-- 滚动策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名称 -->
<fileNamePattern>
${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz
</fileNamePattern>
<!-- 文件最大保存历史数量 -->
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<!-- 过滤器(仅保留debug优先级的日志信息) -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- INFO -->
<appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路径 -->
<file>${log.filePath}/logs/info.log</file>
<!-- 滚动策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名称 -->
<fileNamePattern>
${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz
</fileNamePattern>
<!-- 文件最大保存历史数量 -->
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<!-- 过滤器(仅保留info优先级的日志信息) -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- ERROR -->
<appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路径 -->
<file>${log.filePath}/logs/webapps/error.log</file>
<!-- 滚动策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名称 -->
<fileNamePattern>
${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz
</fileNamePattern>
<!-- 文件最大保存历史数量 -->
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<!-- 过滤器(仅保留error优先级的日志信息) -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<!-- 该 logger 只会记录debug 优先级别以上的日志信息 -->
<!-- 子logger -->
<logger name="com.hyxiao.logback.test" level="${log.level}" additivity="true">
<!-- 与append相绑定,logger文件会往这三个对象输出日志信息 -->
<appender-ref ref="debugAppender"/>
<appender-ref ref="infoAppender"/>
<appender-ref ref="errorAppender"/>
</logger>
<!-- 父logger(上面的logger为子logger),当根logger没有设置 level 时 -->
<!-- 则会继承父logger设置的lever等级,即输出 info(warn、error) 级别的信息 -->
<root level="info">
<appender-ref ref="consoleAppender"/>
</root>
</configuration>
Análisis de código
- La primera es la etiqueta principal de configuración. En general, esta etiqueta no necesita agregar ningún atributo (opcional)
<configuration scan="true" scanPeriod="300 seconds" debug="false">
Establezca scan = "true", el archivo de configuración se volverá a cargar si cambia, el valor predeterminado es true.
Establezca scanPeriod = "300 segundos", después de abrir el escaneo, buscará cambios en los archivos de configuración dentro de 300 segundos.
Establezca debug = "false", cuando se establece en falso, el sistema no generará la información de registro en la parte inferior del logback, es decir, el estado de ejecución del logback
- Seguido por la etiqueta secundaria de propiedad, configure los parámetros de logback (opcional)
<property name="log.level" value="debug"/>
<property name="log.maxHistory" value="30"/>
<property name="log.filePath" value="E:/study"/>
<property name="log.pattern"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n"/>
log.level se refiere al nivel de registro de logback. El
nivel de registro de depuración se divide en cinco niveles, a saber, TRACE <DEBUG <INFO <WRAN <ERROR.
Cuando el nivel se establece en debug, la salida se generará de acuerdo con la prioridad, y la depuración y la información se generarán a su vez. Para los cuatro niveles de información, wran y error, la prioridad de seguimiento no es suficiente.
El diagrama de prioridad del logback es el siguiente:
log.maxHistory se refiere al número máximo
de historial de almacenamiento de archivos log.filePath se refiere a la ruta raíz del almacenamiento de archivos
log.pattern se refiere al formato final de la presentación del registro,
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} -%msg%n
% d: se refiere al formato de hora, {año, mes, día, hora, minuto, segundo}
[% subproceso]: qué subproceso pertenece a ejecutar
% -5level: el nivel se muestra desde la izquierda con un ancho de 5 caracteres, y la sangría es de 5 dígitos para mostrar la información de nivel de registro
% logger {50} -% msg: salida de información de registro en qué clase
% n: salto de línea
- La siguiente es la subetiqueta del appender
Propiedad del codificador ($ {log.pattern} se ha configurado en la etiqueta de propiedad y se puede citar directamente)
<appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${log.pattern}</pattern>
</layout>
</appender>
Ajuste del nivel de DEPURACIÓN
<!-- DEBUG -->
<appender name="debugAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路径 -->
<file>${log.filePath}/logs/debug.log</file>
<!-- 滚动策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名称 -->
<fileNamePattern>
${log.filePath}/debug/debug.%d{yyyy-MM-dd}.log.gz
</fileNamePattern>
<!-- 文件最大保存历史数量 -->
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<!-- 过滤器(仅保留debug优先级的日志信息) -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>DEBUG</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
Configuración de nivel INFO
<!-- INFO -->
<appender name="infoAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路径 -->
<file>${log.filePath}/logs/info.log</file>
<!-- 滚动策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名称 -->
<fileNamePattern>
${log.filePath}/info/info.%d{yyyy-MM-dd}.log.gz
</fileNamePattern>
<!-- 文件最大保存历史数量 -->
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<!-- 过滤器(仅保留info优先级的日志信息) -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
Ajuste del nivel de ERROR
<!-- ERROR -->
<appender name="errorAppender" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 文件路径 -->
<file>${log.filePath}/logs/webapps/error.log</file>
<!-- 滚动策略 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 文件名称 -->
<fileNamePattern>
${log.filePath}/error/error.%d{yyyy-MM-dd}.log.gz
</fileNamePattern>
<!-- 文件最大保存历史数量 -->
<maxHistory>${log.maxHistory}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${log.pattern}</pattern>
</encoder>
<!-- 过滤器(仅保留error优先级的日志信息) -->
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
- Las últimas sub-etiquetas son logger y root, que se utilizan para almacenar objetos de registro e informar al logback de la información de clase a la que se debe prestar atención al paquete.
<!-- 该 logger 只会记录debug 优先级别以上的日志信息 -->
<!-- 子logger -->
<logger name="com.hyxiao.logback.test" level="${log.level}" additivity="true">
<!-- 与append相绑定,logger文件会往这三个对象输出日志信息 -->
<appender-ref ref="debugAppender"/>
<appender-ref ref="infoAppender"/>
<appender-ref ref="errorAppender"/>
</logger>
<!-- 父logger(上面的logger为子logger),当根logger没有设置 level 时 -->
<!-- 则会继承父logger设置的lever等级,即输出 info(warn、error) 级别的信息 -->
<root level="info">
<appender-ref ref="consoleAppender"/>
</root>
El atributo "aditividad" anterior se establece en verdadero de forma predeterminada. Cuando se establece en verdadero, el registrador secundario pasará la información que recopila a la raíz. Aquí, el registrador secundario irá a la etiqueta raíz y agregará appender-ref al niño logger ()., Es decir, el registrador secundario también puede admitir la salida de información de registro en la consola.
revisión
logger : Se utiliza principalmente para almacenar objetos de registro y definir tipos y niveles de registro.
appender : se utiliza para especificar el destino de la salida del registro, el destino puede ser una consola, un archivo, etc.
diseño : formatee la información de salida del registro.
~~~~ ~~~~ ~~~~
No es fácil de hacer, si ayuda, por favor dame un me gusta, ¡gracias! ! !