En las aplicaciones Java, los registros generalmente se dividen en los siguientes 5 niveles:
Spring Boot utiliza el registro de Commons de Apache como el marco de registro interno. Es solo una interfaz de registro. En aplicaciones reales, es necesario especificar la implementación del registro correspondiente para esta interfaz.
La implementación de registro predeterminada de SpringBT es Java Util Logging, que es un paquete de registro integrado en JDK. Además, SpringBT también admite implementaciones de registro muy populares como log4j y logback.
Las implementaciones de registro anteriores se conocen colectivamente como marcos de registro
¡Practiquemoslo a continuación!
Uso del complemento de registro de arranque de primavera
Primero agregue la configuración al archivo Application.Properties:
logging.level.root = info
El código del controlador es el siguiente:
paquete com.hansonwang99.Controller; import org.springframework.web.bind.annotation.restController;@RestController@requestMapping ("/testLogging") public class LoggingTestController {private static logger = loggerFactory.getLogger (k8sresctrlapplication.class); @GetMapping ("/Hello") public String Hello () {logger.info ("Test Rogging ..."); devolver "hola"; }}Resultados de ejecución
Dado que el nivel de registro está configurado en información, se imprimirá información que contiene información y arriba
Como se puede ver aquí, la mayoría de los registros de información provienen del marco SpringBT en sí. Si queremos bloquearlos, podemos establecer el nivel de registro en error primero, de modo que la información de información del marco en sí no se imprima. Luego establezca el paquete específico en la aplicación en un registro de nivel de depuración, para que solo pueda ver los registros de nivel de depuración en el paquete que le preocupa.
Controla el nivel de registro de un paquete específico
Cambiar la configuración en Application.yml
Registro: Nivel: Root: Error com.hansonwang99.Controller: Debug
Es obvio que el nivel de registro raíz está configurado en error, y luego el nivel de registro del paquete com.hansonwang99.controller está configurado en depuración, lo que significa: primero prohibir todas las configuraciones y luego permitir la configuración individual.
Código de controlador
paquete com.hansonwang99.controller; import org.slf4j.logger; import org.slf4j.loggerFactory; 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 logger logger = loggerFactory.getLogger (this.getClass ()); @GetMapping ("/Hello") public String Hello () {logger.info ("Test Rogging ..."); devolver "hola"; }}Resultados de ejecución
Se puede ver que el marco en sí tiene todos los registros de nivel de información ocultos, y los registros en el paquete especificado se imprimen correctamente de acuerdo con el nivel.
Registros de salida a un archivo
Registro: nivel: root: error com.hansonwang99.controller: archivo de depuración: $ {user.home} /logs/hello.logResultados de ejecución
Usando el registro de arranque de Spring, descubrimos que aunque el registro se ha salido al archivo, una copia aún se imprimirá en la consola. Descubrimos que usar org.slf4j.Logger no puede resolver este problema
Marco de registro log4j integrado
Agregar dependencias en pom.xml
<Spendency> <MoupRupid> org.springframework.boot </proupid> <artifactid> spring-boot-starter-web </artifactid> <exclusions> <exclusion> <grupoD> org.springframework.boot </groupid> <artifactid> spring-b oot-starter-logging </artifactid> </extusion> </exclusiones> </pendency> <pendency> <uproupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-log4j2 </artifactid> </pepertency>
Agregue el archivo log4j2.xml en el directorio de recursos, el contenido es el siguiente:
<? xml versión = "1.0" encoding = "utf -8"?> <figuration> <Appenders> <file name = "file" filename = "$ {sys: user.home} /logs/hello2.log"> <patruthlayout patrón = " %d {hh: mm: ss, ss} %p %c ( %l) - %m %n"/" </appenders> <gloggers> <root nivel = "error"> <appender-ref ref = "file"/> </ root> <logger name = "com.hansonwang99.controller" nivel = "debug"/> </loggers> </figuration>El otro código sigue siendo el mismo
Ejecutar el programa encontró que la consola no tiene salida de registro, y hay contenido en el archivo Hello2.log, que está en línea con nuestras expectativas:
Y el formato de registro coincide con la definición en pattern="%d{HH:mm:ss,SSS} %p %c (%L) - %m%n" formato
Log4j toma más práctica
Configuración de pom.xml:
<Spendency> <MoupRupid> org.springframework.boot </proupid> <artifactid> spring-boot-starter-web </artifactid> <exclusions> <exclusion> <grupoD> org.springframework.boot </groupid> <artifactid> spring-b oot-starter-logging </artifactid> </extusion> </exclusiones> </pendency> <pendency> <uproupid> org.springframework.boot </groupid> <artifactid> spring-boot-starter-log4j2 </artifactid> </pepertency>
Log4j2.xml Configuración
<? xml versión = "1.0" encoding = "utf-8"?> <Configuration Status = "Warn"> <Properties> <Property Name = "App_name"> SpringBoot-Web </property> <Property Name = "log_path"> logs/$ {app_nneout} </properties> </Properties> <Appenders> <S console name = "Console" Target " patrón = "[%d] [%t] [%p] [%l]%m%n"/> </ console> <rollingfile name = "rollingfileinfo" filename = "$ {log_path} /info.log" filePattern = "$ {log_path}/$$ {date: aaa yyyy-mm}/info-%d {yyyy-mm-dd}-%i.log.gz"> <filters> <ThresholdFilter nivel = "info"/> <ThresholdFilter nivel = "warn" onmatch = "deny" onmismatch = "neutral"/> <simalter "/> </filters. patrón = "[%d] [%t] [%p] [%c:%l]%m%n" /> <policies> <!-Archive Daily Archivos-> <TimeBasedTriggeringPolicy Interval = "1" modulado = "true" /> <!-Limite un tamaño de archivo único-> <SizeBasedTriggeringPolicy Size = "2 Mb" /> < /Policies> <!-Limite un tamaño de archivo de un solo archivo-Aye de los archivos del día> <FieFaulTrolloverStrategy CompressionLevel = "0" max = "10"/> </rollingfile> <rollingfile name = "rollingfilewarn" filename = "$ {log_path} /warn.log" filePattern = "$ {log_path}/$$ {date: aaa yyyy-mm}/warn-%d {yyyy-mm-dd}-%i.log.gz"> <filters> <ThrhesholdFilter nivel = "warn"/> <Thrhesholdfilter nivel = "error" en mapatch = "inyy" onmismatch = "neutral"/"neutral"/"neutre" patrón = "[%d] [%t] [%p] [%c:%l]%m%n" /> <policies> <!-Archive Daily Archivos-> <TimeBasedTriggeringPolicy Interval = "1" modulado = "true" /> <!-Limite un tamaño de archivo único-> <SizeBasedTriggeringPolicy Size = "2 Mb" /> < /Policies> <!-Limite un tamaño de archivo de un solo archivo-Aye de los archivos del día> <FaFaulTrolloverStrategy CompressionLevel = "0" max = "10"/> </rollingfile> <rollingfile name = "rollingfileError" filename = "$ {log_path} /error.log" filePattern = "$ {log_path} /$$ {date: aaa yyyy-mm} /error-%d {yyyyy-mm-dd}-%i.log.gz"> <ThresholdFilter nivel = "error" /> <patrón de patrones = "[%d] [%t] [%p] [%c:%l]%m%n" /" /> <policeut patrón =" [%d] [%t] [%p] [%c:%l]%m%n " /" /> <policeut patrón = "[%d] [%t] [%p] [%c:%l]%m%n" /" /<policies <! <TimeBasedTriggeringPolicy interval="1" modulate="true" /> <!-- Limit single file size--> <SizeBasedTriggeringPolicy size="2 MB" /> </Policies> <!-- Limit the number of files per day--> <DefaultRolloverStrategy compressionLevel="0" max="10"/> </RollingFile> </appenders> <loggers> <root nivel = "info"> <appender-ref ref = "console" /> <appender-ref ref = "rollingfileInfo" /> <appender-ref ref = "rollingfilewarn" /> <appender-ref ref = "rollingfileError" /> </adead> </ loggers> </figuration>Código del controlador:
paquete com.hansonwang99.controller; import org.apache.logging.log4j.logmanager; import org.apache.logging.log4j.logger; import og.springframework.web.bind.annotation.getmapping; import og.springframework.web.Bindation.requestmapping; org.springframework.web.bind.annotation.restController;@RestController@requestmapping ("/testLogging") public class LoggingTestController {private final logger logger = logManager.getLogger (this.getClass ()); @GetMapping ("/Hello") public String Hello () {for (int i = 0; i <10_0000; i ++) {logger.info ("Info Execute Index Method"); logger.warn ("Warn Execute Index Method"); logger.error ("Error ejecutar el método de índice"); } devolver "mi primera aplicación SpringBoot"; }}Resultados de ejecución
Los registros se almacenarán en diferentes archivos de acuerdo con diferentes niveles. Cuando el tamaño del archivo de registro excede 2m, varios archivos se comprimirán y almacenarán. Se recomienda ajustar el tamaño del archivo de registro del entorno de producción a 20-50 MB.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.