(5) Spring Boot y registros

Primero, el marco de registro

     Xiao Zhang: desarrolló un gran sistema distribuido;

  1.  System.out.println (""); imprime los datos clave en la consola; ¿eliminarlos? Escribir en un archivo?
  2. Marco para registrar información de tiempo de ejecución del sistema; marco de registro; zhanglogging.jar;
  3. Algunas funciones en el alto? Modo asincrónico? Archivado automático? xxxx? zhanglogging-good.jar?
  4. ¿Eliminar el marco anterior? Coloque un nuevo marco y vuelva a modificar la API relacionada anterior; zhanglogging-prefect.jar;
  5. JDBC --- Controlador de base de datos;

Escribió una capa de interfaz unificada; fachada de registro (una capa abstracta del registro); logging-abstract.jar;

Importe implementaciones de registro específicas en el proyecto; nuestros marcos de registro anteriores son todas capas abstractas de implementación;

(1) Marco de registro en el mercado;

JUL 、 JCL 、 Jboss-logging 、 logback 、 log4j 、 log4j2 、 slf4j ....

Fachada de registro (la capa abstracta del registro) Implementación de registro

 JCL (Registro de Yakarta Commons) (obsoleto) 

 SLF4j (Fachada de registro simple para Java)

 jboss-logging (no se usa comúnmente)

Log4j (sin logback avanzado)

 JUL (java.util.logging) (incluido con jdk)

Log4j2 (el desarrollo de apache es particularmente bueno, pero muchos marcos aún no se han adaptado)

 Volver a iniciar sesión

Elija una fachada (capa abstracta) a la izquierda y una implementación a la derecha;

  • Fachada de troncos: SLF4J;
  • Log de realización: Logback;
  • SpringBoot: la capa inferior es el marco de Spring, y el marco de Spring usa JCL por defecto;

SpringBoot selecciona SLF4j y logback;

 En segundo lugar, el uso del enlace al sitio web oficial de SLF4j log      slf4j

(1) Cómo usar SLF4j en el sistema.

    En el desarrollo futuro, la llamada del método de registro no debe llamar directamente a la clase de implementación del registro, sino llamar al método en la capa de abstracción del registro;

Importe el jar slf4j y el jar de implementación de logback en el sistema.

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class HelloWorld {
  public static void main(String[] args) {
    Logger logger = LoggerFactory.getLogger(HelloWorld.class);
    logger.info("Hello World");
  }
}

Uso de registro gráfico:

         ç¹å »æ¾å¤§

Cada marco de implementación de registro tiene su propio archivo de configuración. Después de usar slf4j, el archivo de configuración todavía se incluye en el archivo de configuración del marco de implementación de registro;

(2) Problemas heredados (el marco anterior usaba su propio marco de registro, y el último sistema usaba muchos marcos de registro diferentes)

  • slf4j + logback
  • Spring (commons-logging)
  • Hibernate (jboss-logging)
  • MyBatis 、 xxxx

¿Cómo unificar los registros del marco de registro, incluso si otros marcos y yo utilizamos slf4j para generar juntos?

ç¹å »æ¾å¤§

  • Cómo hacer que todos los registros del sistema se unifiquen a slf4j;
  1. Primero excluya otros marcos de registro en el sistema
  2. Luego reemplace el marco de registro original con un middleware
  3. Luego importamos otras implementaciones de slf4j     

Tres, relación de registro de Spring Boot

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

SpringBoot lo usa para la función de registro;

    <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
    </dependency>

Dependencias subyacentes

 

Resumen:

  1. La capa inferior de SpringBoot también usa slf4j + logback para iniciar sesión
  2. SpringBoot también reemplazó otros registros con slf4j;
  3. Paquete de reemplazo intermedio? (Robo de vigas para paquetes de columnas)
@SuppressWarnings("rawtypes")
public abstract class LogFactory {

    static String UNSUPPORTED_OPERATION_IN_JCL_OVER_SLF4J =
          "http://www.slf4j.org/codes.html#unsupported_operation_in_jcl_over_slf4j";
    
           //中间包  实际是对log4j日志 new slf4j的对象 进行替换过度

    static LogFactory logFactory = new SLF4JLogFactory();

                                

   ¿Qué pasa si queremos introducir otros marcos? ¿Debe eliminarse la dependencia de registro predeterminada de este marco?

   El marco de Spring utiliza el registro de bienes comunes;

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

Conclusión

      SpringBoot puede adaptar automáticamente todos los registros, y la capa inferior utiliza slf4j + logback para registrar registros.Al introducir otros marcos, solo necesita excluir el marco de registro del que depende este marco;

Cuatro, uso de registro de Spring Boot

   (1) La configuración predeterminada de las instrucciones de registro del sitio web oficial de    Spring Boot 2.2.5

         

  •   SpringBoot nos ayuda a configurar registros por defecto;
  // 记录器
    Logger LOGGER = LoggerFactory.getLogger(SpringBootTest.class);
    @Test
    public void contextLoad(){
        // System.out.println();
        /**
         * 日志级别由高到低
         * 日志级别:ERROR,WARN,INFO,DEBUG,或TRACE。
         * 可以调整输出的日志级别;日志就只会在这个级别以以后的高级别生效
         */
        LOGGER.trace("日志踪迹");
        LOGGER.debug("日志debug模式");
        //SpringBoot默认给我们使用的是info级别的
        //,没有指定级别的就用SpringBoot默认规定的级别;root级别
        LOGGER.info("日志提示信息");
        LOGGER.warn("日志警告信息");
        LOGGER.error("日志提示错误信息");
    }

Descripción del formato de salida del registro:

   日志输出格式:
        %d表示日期时间,
        %thread表示线程名,
        %-5level:级别从左显示5个字符宽度
        %logger{50} 表示logger名字最长50个字符,否则按照句点分割。 
        %msg:日志消息,
        %n是换行符
    -->
    %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n

# 调整日志隔离级别 wxw目录下的调成trace   springboot 默认是root级别
#logging.level.com.wxw=trace
        
# 默认是控制台输出
# 写入spring.log指定的目录。名称可以是确切的位置,也可以相对于当前目录。
#logging.file.path=springboot/log

# 指定目录 logging.file.name :写入指定的日志文件。名称可以是确切的位置,也可以相对于当前目录。
#logging.file.name=springboot/boot.log

#  在控制台输出的日志的格式
#logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
# 指定文件中日志输出的格式
#logging.pattern.file=%d{yyyy-MM-dd} === [%thread] === %-5level === %logger{50} ==== %msg%n

Propiedades de registro:

logging.file.name logging.file.path Un ejemplo Descripción

(No)

(No)

 

Consola de grabación solamente.

Archivos específicos

(No)

my.log

Escribe en el archivo de registro especificado. El nombre puede ser la ubicación exacta o relativa al directorio actual.

(No)

Directorio específico

/var/log

Escribe en el spring.logdirectorio especificado. El nombre puede ser la ubicación exacta o relativa al directorio actual.

(2) Configuración de registro personalizada

       Puede activar varios sistemas de registro al incluir bibliotecas apropiadas en el classpath, y puede Environmentpersonalizar aún más varios sistemas de registro al proporcionar archivos de configuración apropiados en el directorio raíz del classpath o en la ubicación especificada por las siguientes propiedades de Spring  logging.config.

  •  Deshabilitar el registro predeterminado : puede org.springframework.boot.logging.LoggingSystemforzar Spring Boot para que use un sistema de registro específico mediante la propiedad del sistema. Este valor debe ser el nombre de clase totalmente calificado de la implementación LoggingSystem. También puede deshabilitar completamente la configuración de registro de Spring Boot utilizando el valornone。
  • Coloque el archivo de configuración de cada marco de registro debajo de la ruta de clase; SpringBoot no usará su configuración predeterminada
Sistema de registro Personalización

Volver a iniciar sesión

logback-spring.xmllogback-spring.groovylogback.xml, O logback.groovy

Log4j2

log4j2-spring.xml o log4j2.xml

JDK (Java Util Logging)

logging.properties

         

Nota:

  • logback.xml : directamente reconocido por el marco de registro;
  • logback-spring.xml : el marco de registro no carga directamente los elementos de configuración de registro. Spring Boot analiza la configuración de registro y puede utilizar la función de perfil avanzada de Spring Boot
  • El entorno Springboot cambia al modo abierto, (1) propiedades / archivo de configuración yml (2) configuración de línea de comando
<springProfile name="staging">
    <!-- configuration to be enabled when the "staging" profile is active -->
      可以指定某段配置只在某个环境下生效
</springProfile>

Por ejemplo:

<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <!--
        日志输出格式:
            %d表示日期时间,
            %thread表示线程名,
            %-5level:级别从左显示5个字符宽度
            %logger{50} 表示logger名字最长50个字符,否则按照句点分割。 
            %msg:日志消息,
            %n是换行符
        -->
        <layout class="ch.qos.logback.classic.PatternLayout">
            <springProfile name="dev">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ---->
                      [%thread] ---> %-5level %logger{50} - %msg%n</pattern>
            </springProfile>
            <springProfile name="!dev">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} ==== [%thread] ==== 
                                     %-5level %logger{50} - %msg%n</pattern>
            </springProfile>
        </layout>
    </appender>

Si usa logback.xml como archivo de configuración de registro, pero también usa la función de perfil, se producirá el siguiente error

no applicable action for [springProfile]

Cinco, marco de registro de conmutación Spring Boot

  De acuerdo con el diagrama de adaptación de registro de slf4j, se puede realizar una conmutación relevante;

  (1) La forma de slf4j + log4j;

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
  <exclusions>
    <exclusion>
      <artifactId>logback-classic</artifactId>
      <groupId>ch.qos.logback</groupId>
    </exclusion>
    <exclusion>
      <artifactId>log4j-over-slf4j</artifactId>
      <groupId>org.slf4j</groupId>
    </exclusion>
  </exclusions>
</dependency>

<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
</dependency>

Cambiar a log4j2

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <artifactId>spring-boot-starter-logging</artifactId>
                    <groupId>org.springframework.boot</groupId>
                </exclusion>
            </exclusions>
        </dependency>

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

 

108 artículos originales publicados · Me gusta 58 · Visitas 50,000+

Supongo que te gusta

Origin blog.csdn.net/qq_41893274/article/details/104741988
Recomendado
Clasificación