Explicación súper detallada de la entrada del registro de logback

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.

  1. Ruta de salida personalizada, fácil mantenimiento posterior (conveniente para los socios de operación y mantenimiento)

    能够将日志信息存储到本地文件或存储到数据库中去,而且根据滚动策略设置一天一个文件
    
  2. Personalice el formato de salida del registro según sus preferencias

    可以通过配置文件修改日志文件的具体内容,在不改变原有业务代码的情况下改变输出格式,方便调试
    
  3. Lleve consigo la información del contexto del registro

    上下文中包含着时间戳、类的所在路径、所占用的堆栈信息和占用的线程等等
    
  4. Puede elegir qué generar en tiempo de ejecución

     运行无误的时候,我们只在乎返回的运行信息;运行出错的时候,选择返回错误信息
    
  5. Configuración conveniente y alto rendimiento

     框架与业务代码耦合小,正常业务之外的审计和运维需求,与系统性能无关
    

Configuración del marco

Hay dos esquemas de configuración comunes para el logback:

  1. 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.
    solicitud
  2. 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:
prioridad
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! ! !

Supongo que te gusta

Origin blog.csdn.net/hyx1249273846/article/details/113632780
Recomendado
Clasificación