Este artículo presenta principalmente la configuración de SLF4J+Logback en Java Engineering.
Antes de introducir la configuración SLF4J+logback, primero introduzca el logback logback del componente de registro.
(1) La introducción y la configuración del logback de componentes log
1. Introducción al logback
Logback es otro componente de registro de código abierto diseñado por el fundador de log4j. Logback se divide actualmente en tres módulos: logback-core, logback-classic y logback-actividad. Logback-core es el módulo básico de los otros dos módulos. logback-classic es una versión mejorada de log4j. Además, logback-classic implementa completamente la API SLF4J para que pueda reemplazarlo fácilmente con otros sistemas de registro como log4j o jdk14 registro. El módulo de acceso de acceso Logback-Access se integra con contenedores de servlet para proporcionar la función de acceder a los registros a través de HTTP. Logback es el sitio web oficial que combina dos componentes con SLF4J de la siguiente manera:
Sitio web oficial de Logback: http://logback.qos.ch
Sitio web oficial de SLF4J: http://www.slf4j.org
Los componentes utilizados en este artículo son los siguientes: ¡vaya al sitio web oficial para descargar!
Logback -access -.0.0.jar
logback -classic -.0.0.Jar
logback-core-1.0.0.Jar
SLF4J-API-1.6.0.JAR
2. Razones para que logback reemplace log4j:
Logback y log4j son muy similares. Aquí hay algunas ventajas de logback a través de log4j:
1. Implementa más rápido la reescritura del núcleo de la logback, y el rendimiento aumenta más de 10 veces en algunas rutas de ejecución clave. Además, Logback no solo mejora el rendimiento, sino que también tiene cargas de memoria menos inicializadas.
2. Muy completo de registro de prueba ha sido probado durante algunos años, innumerables horas. La prueba de Logback es completamente diferente. Desde el punto de vista del autor, esta es una razón simple e importante para elegir logback en lugar de log4j.
3. logback-classic se implementa naturalmente con SLF4J logback-classic para lograr SLF4J. En el uso de SLF4J, no puede sentir logback-classic. Además, debido a que logback-classic implementa slf4j de manera muy natural, cambiar a log4j u otro es muy fácil proporcionarlo en otro paquete jar, y no hay necesidad de tocar el código implementado a través de SLF4JAPI.
4. El sitio web oficial de documentos muy completos tiene más de 200 páginas de documentos.
5. Recargar automáticamente el archivo de configuración como una modificación del archivo de configuración, el Logback-Classic puede recargar automáticamente el archivo de configuración. El proceso de escaneo es rápido y seguro, no necesita crear otro hilo de escaneo. Esta tecnología garantiza completamente que la aplicación puede ejecutarse en el entorno JEE.
6. Lilith Lilith es un observador del incidente de log, similar a la motosierra de log4j. Lilith también puede procesar grandes cantidades de datos de registro.
7. Modo de precaución y recuperación muy amigable en modo de precaución, múltiples instancias de FileAppender se ejecutan en múltiples JVM, y pueden escribir de manera segura el mismo archivo de registro. RollingFilePeppers tendrá algunas limitaciones. FileAppender de Logback y sus subclases, incluida RollingFileAppender, pueden recuperarse de excepciones de E/S muy amigables.
8. Los archivos de configuración pueden manejar diferentes situaciones. Estos archivos de configuración son solo pequeñas diferencias, que se pueden implementar e implementar, para que un archivo de configuración pueda adaptarse a múltiples entornos.
9. Filtros (filtros) A veces, se requiere un problema y se necesita un registro. En LOG4J, solo reduce el nivel de registro, pero esto hará muchos registros y afectará el rendimiento de la aplicación. En Logback, puede continuar manteniendo ese nivel de registro y eliminar algunos casos especiales. Para lograr esta función, solo necesita agregar 4 líneas de configuración XML. Puede consultar MDCFilter.
10. SIFTTINGAPPENER (un apéndice muy multifuncional) se puede usar para dividir el archivo de registro de acuerdo con cualquier parámetros operativos dados. Por ejemplo, SifttingAppender puede distinguir la sesión del usuario que sigue a la sesión del usuario, y luego cada usuario tendrá un archivo de registro.
11. Comprime automáticamente el Log RollingFileAppender que se ha presionado. La compresión es un proceso asincrónico, por lo que incluso para archivos de registro grandes, las aplicaciones no se verán afectadas en el proceso de compresión.
12. El árbol de la pila tiene una versión de paquete de logback.
13. Elimine automáticamente el archivo de registro anterior configurando la propiedad MaxHistory de TimeBasedRollingPolicy o SizeandTimeBasedFNATP. Si MaxHistory 12 está configurado, esos archivos de registro que han pasado por 12 meses se eliminarán automáticamente.
En resumen, logback es mejor que log4j.
3. Introducción a la configuración de logback
1. Logger, apéndice y diseño
El registrador, como grabador del registro, lo asocia en el contexto correspondiente que se utiliza, se usa principalmente para almacenar objetos de registro.
Appender se usa principalmente para especificar el destino de la salida de registro.
El diseño es responsable de la salida del evento en una información de registro de cadena y formateada.
2. Contexto del registrador
Cada registrador está asociado con un LoggerContext. Todos los demás registradores también se obtuvieron a través del método estático del org.slf4j.loggerFactory Class GetLogger. El método GetLogger nombra al Logger. Use el mismo nombre para llamar al método LoggerFactory.getLogger.
3. Herencia de niveles y niveles efectivos
Se puede asignar Logger. Los niveles incluyen: traza, depuración, información, advertencia y error, definido en ch.qos.logback.classic.level class. Si no se asigna al registrador, heredará el nivel del antepasado más cercano del nivel de distribución. El nivel predeterminado de Root Logger es la depuración.
4. Método de impresión y reglas de selección básica <Br /> Los métodos de impresión determinan el nivel de la solicitud. Por ejemplo, si L es una instancia de registrador, entonces la declaración l.info ("..") es una declaración de registro con información de nivel. El nivel de una solicitud de registro se llama habilitado cuando es más alto o igual al nivel válido de su registrador, de lo contrario se llama deshabilitado. El nivel de solicitud de registro es P, y el nivel válido del registrador es q.
Esta regla está en el corazón de logback. La clasificación de niveles es: traza <debug <info <warn <error
4. Configuración predeterminada de Logback <Br /> Si los archivos de configuración logback-test.xml y logback.xml no existen, entonces logback llamará a BasicConfigurator de forma predeterminada para crear una configuración minimizada. Para minimizar la configuración que consiste en un consolepender asociado con un registrador de raíces. El modo de salida es %D {HH: MM: SS.SSS} [ %Thread] %-5Level %Logger {36} - %Msg %N's PatternLayoutendCoder. El nivel predeterminado de Root Logger es la depuración.
1. El archivo de configuración de logback
La sintaxis del archivo de configuración logback es muy flexible. Debido a la flexibilidad, el esquema DTD o XML no se puede definir. Sin embargo, puede describir la estructura básica del archivo de configuración de esta manera: comience con <figuration>, hay cero o más elementos <ppender>, cero o más elementos <grogger> y un máximo de elementos <adrón>.
2. Los pasos de configuración predeterminada de logback
(1) intente encontrar el archivo logback-test.xml en classpath;
(2).
(3).
3. Archivo logback.xml
<. Appender name = "stdout"> <!-Log Salida Codificación-> <coding> UTF-8 </coding> <sayout> <!-Salida de formato:%d Fecha de medias,%de hilo indica el nombre del hilo,%-5: 5: Nivel 5 Ancho de caracteres de la pantalla izquierda 5 Ancho de caracteres%Msg: Mensaje de registro,%n es un símbolo de cambio-> <sontern>%d {yyyyy-mm-dd hh: mm: ss.sss} [%hilo]%- 5Level %logger {50}- %msg %n </matter> </lokeut> </papender> <!-Generar archivos de registro de todos los días-> <ppender name = "file"> <coding> utf-8 <// Codificación> <RollingPolicy> <!-La salida del nombre del archivo por el archivo de registro-> <filenamePattern> $ {log_home} /myapp.log.%d {yyyy-mm-dd}. /maxhistory> </rollingpolice> <lElout> <!-Salida formulada:%d representa la fecha,%hilo representa el nombre del hilo,%d representa el nombre del subproceso,%-5 -5Vel: 5 caracteres de ancho mostrado desde el%de msg de izquierda: Mensaje de registro,%n es un cambio de caracteres-> <pather>%d {yyyyy-mm-dd hh: mm: ss.sss} [%hilo]%-5evel%logger {50}-%msg%n </patrón > </logout> <!-El tamaño más grande del archivo de registro-> <TriggeringPolice> <MAXFILESIZE> 10MB </AMXFILESIZE> </TRIGGERINGPOLEICE> </ppen der> <!-Mostrar parámetros para Hibernate SQL dedicado a la personalización de HiBernate -> <logger name = "organnate.type.descriptor.sql.basicbinder =" traza " /> <logger =" org.hibernate. org.hibernate.sql "nivel =" def " /> <log. Erameters" nivel = "debug" /> <logger name = "org.hibernate.engine.qury.hqlQueryPlan" nivel = "debug" /> <! LOG SALID SALUTLE-> <root nivel = "info"> <ppender-ref = "stdout" /> <ppender-ref ref = "file" /> </root> <!-registra la base de datos-> <Ppender name = "DB"> <! DataBASEname </url> <serem> root </serve> <shase contraseña> root </shazing> </shasource> </nectionsource> </apender> -> </configuration >> </configuration>> </figuration>> </Configuración >> 5. Use el registro de referencia en el programa
paquete com.stu.system.action; clase);
A continuación, presentemos la configuración de SLF4J+logback en el proyecto Java.
1. Configuración de SLF4J+logback basada en Maven
<Spendency> <ProupId> org.slf4j </groupid> <artifactid> slf4j-api </arfactid> <versión> 1.7.10 </versión> </pendency> <Groupid> c h.qos.logback </groupid> <artifactid> logback-classic </artifactid> <verserse> 1.1.2 </versions> </deendecy> <g.qos. /Versión> </Dependencia>
2. Cree un nuevo archivo de configuración logback.xml en el directorio classpath
<? xml versión = "1.0" encoding = "utf-8"?> <!-escaneo: cuando esta propiedad se establece en verdadero, si el archivo de configuración cambia, se volverá a cargar y el valor predeterminado es verdadero. ScanPeriod: Establece el intervalo de tiempo para monitorear si hay una modificación del archivo de configuración. El intervalo de tiempo predeterminado es de 1 minuto. Debug: cuando este atributo se establece en True, la información de registro interna de Logback se imprimirá para verificar el estado de ejecución de logback en tiempo real. El valor predeterminado es falso. -> <Configuration scan = "false" scanPeriod = "60 segundos" debug = "false"> <!-Defina el directorio raíz del registro-> <propiedad name = "log_home" valor = "/app/log " /> <!-Define el nombre del archivo de registro-> <propiedad name =" appname "value =" netty "> </property> <!-ch.qos.logback.core.consoleppender indica la salida de la consola-> <Appender name = "stdout"> <coding> UTF-8 </coding> <!-Formato de salida de registro:%d Fecha de medios,%de hilo indica el nombre del subproceso,%-5 nivel: nivel 5 de caracteres de 5 caracteres desde la izquierda% %%%%%Omin ancho de caracteres %%%%%ama logger {50} Significa que el nombre del registrador es de 50 caracteres, de lo contrario se dividirá de acuerdo con el período. %Msg: Mensaje log, %n es un cambio de líneas-> <layout> <pather> %d {yyyyy-mm-dd hh: mm: ss.sss} [ %hilo] %-5Level %logger {50}-- % msg% n </matter> </loutout> </papender> <!- Desplácese para grabar el archivo, primero registre el registro en el archivo especificado y cuando se cumpla cierta condición, registre el registro en otros archivos- -> <appender name = "applogappender"> <coding> UTF-8 </coding> <!-El nombre del archivo de registro designado-> <archivo> $ {log_home}/$ {appname} .log </sil> ! -> <rollingPolicy> <!-La ubicación de almacenamiento y el nombre del archivo del archivo generado durante el%drin {yyyy-mm-dd}: roll roll por día a día. appname}-%d {yyyyy-mm-dd}-%i.log </filenamePattern> <!-nodo opcional, controle el archivo de archivo reservado lo más grande si la cantidad excede la cantidad, elimine el archivo anterior. Suponiendo que se enrolla todos los días y Maxhistory es 365, solo el último archivo de 365 días se guarda para eliminar el archivo anterior antes. Tenga en cuenta que los archivos antiguos se eliminan, y esos directorio creados para archivos también se eliminarán. -> <Maxhistory> 365 </aMaxhistory> <!-El tamaño del archivo de registro excede a MaxFilesize, y el archivo de registro rodando de acuerdo con el%que mencioné anteriormente presta atención al tamaño de configuración. TimeBasedFilenamingAndRiggeringPolicy> <maxfilesize> 100mb </aMaxFilesize> </TimeBasedFilenamingan DTriggeringPolicy> </RollingPolicy> <!-Formato de salida de registro:%d representa la hora de fecha,%hilo indica el nombre del hilo,%-5 nivel: el nivel de 5 caracteres de los 5 caracteres de La pantalla izquierda de 5 caracteres de ancho%Logger {50} indica que el nombre del registrador es de 50 caracteres, de lo contrario se dividirá de acuerdo con el período. %Msg: Mensaje log, %n es un cambio de líneas-> <sayout> <mattern> %d {yyyyy-mm-dd hh: mm: ss.sss} [ %hilo]-[ %-5Level] [ %logger {50}: %line]- %msg %n </matter> </lokeut> </spender> <!- Logger se usa principalmente para almacenar objetos de registro. La primera mitad del nivel de paquete: el nivel de registro que se registrará, incluida la traza <debug <info <warn <adición de error: la función es si el registro de niños usa el appender configurado por rootLogger para la salida, falso: significa que solo significa Se utiliza el aportador del registrador actual -ref, true: el appender-ref y el rootLogger del logger-ref actual y el rootLogger-refs son efectivos-> <!-Hibernate logger-> <logger name = "org.hibernate" nivel " = "Error" /> <! "nivel =" info "additivity =" true "> <ppender-ref ref =" aplagappender " /> </logger> <!-Root and Logger es la relación entre padre e hijo. Si no hay una definición especial, es predeterminado. -> <root nivel = "info"> <ppender-ref = "stdout" /> <ppender-ref = "aplagappender" /> < /root> < /configuration>