Apache Log4j es una utilidad de registro basada en Java . Fue escrito originalmente por Ceki Gülcü y es parte del proyecto Apache Logging Services de Apache Software Foundation . Log4j es uno de varios marcos de registro de Java .
Desarrollador (es) | Fundación de software Apache |
---|---|
Versión inicial | 8 de enero de 2001 [1] |
Lanzamiento estable | 2.14.1 / 6 de marzo de 2021 [2] |
Repositorio | Repositorio Log4j |
Escrito en | Java |
Sistema operativo | Multiplataforma |
Tipo | Inicio sesión |
Licencia | Licencia Apache 2.0 |
Sitio web | registro |
Desde entonces, Gülcü ha iniciado los proyectos SLF4J y Logback [3] , con la intención de ofrecer un sucesor de Log4j.
El equipo de Apache Log4j ha creado un sucesor de Log4j 1 con el número de versión 2. [4] Log4j 2 se desarrolló con un enfoque en los problemas de Log4j 1.2, 1.3, java.util.logging y Logback, y aborda los problemas que aparecían en esos marcos. [5] Además, Log4j 2 ofrece una arquitectura de complementos que lo hace más extensible que su predecesor. Log4j 2 no es compatible con versiones anteriores de las versiones 1.x, [6] aunque hay un "adaptador" disponible.
El 5 de agosto de 2015, el Comité de Gestión de Proyectos de Apache Logging Services anunció [7] que Log4j 1 había llegado al final de su vida útil y que se recomienda a los usuarios de Log4j 1 actualizar a Apache Log4j 2.
Apache Log4j 2
Apache Log4j 2 es el sucesor de Log4j 1, que se lanzó como versión GA en julio de 2014. El marco se reescribió desde cero y se inspiró en las soluciones de registro existentes, incluidos Log4j 1 y java.util.logging. Las principales diferencias [8] [9] de Log4j 1 son:
- Fiabilidad mejorada. Los mensajes no se pierden al reconfigurar el marco como en Log4j 1 o Logback
- Extensibilidad: Log4j 2 admite un sistema de complementos para permitir a los usuarios definir y configurar componentes personalizados
- Sintaxis de configuración simplificada
- Soporte para xml, json, yaml y configuraciones de propiedades
- Filtros mejorados
- Soporte de búsqueda de propiedades para valores definidos en el archivo de configuración, propiedades del sistema, variables de entorno, el mapa ThreadContext y datos presentes en el evento
- Compatibilidad con varias API: Log4j 2 se puede utilizar con aplicaciones que utilizan las API Log4j 2, Log4j 1.2, SLF4J, Commons Logging y java.util.logging (JUL).
- Niveles de registro personalizados
- Compatibilidad con lambda de estilo Java 8 para "registro diferido"
- Marcadores
- Soporte para objetos de mensaje definidos por el usuario
- "Basura libre o baja basura" en configuraciones comunes
- Velocidad mejorada
Una de las características más reconocidas de Log4j 2 es el rendimiento de los "registradores asíncronos". [10] Log4j 2 utiliza LMAX Disruptor . [11] La biblioteca reduce la necesidad de bloqueo del kernel y aumenta el rendimiento del registro en un factor de 12. Por ejemplo, en el mismo entorno, Log4j 2 puede escribir más de 18.000.000 de mensajes por segundo, mientras que otros marcos como Logback y Log4j 1 solo escriben <2,000,000 de mensajes por segundo.
Niveles de registro log4j
La siguiente tabla define los mensajes y niveles de registro integrados en Log4j, en orden decreciente de gravedad. La columna de la izquierda enumera la designación del nivel de registro en Log4j y la columna de la derecha proporciona una breve descripción de cada nivel de registro.
Nivel | Descripción |
---|---|
APAGADO | El rango más alto posible y está destinado a desactivar el registro. |
FATAL | Errores graves que provocan la terminación prematura. Espere que sean visibles de inmediato en una consola de estado. |
ERROR | Otros errores de tiempo de ejecución o condiciones inesperadas. Espere que sean visibles de inmediato en una consola de estado. |
ADVERTIR | Uso de API obsoletas, mal uso de API, "casi" errores, otras situaciones de tiempo de ejecución que son indeseables o inesperadas, pero no necesariamente "incorrectas". Espere que sean visibles de inmediato en una consola de estado. |
INFO | Eventos interesantes en tiempo de ejecución (inicio / apagado). Espere que sean visibles de inmediato en una consola, así que sea conservador y manténgalo al mínimo. |
DEPURAR | Información detallada sobre el flujo a través del sistema. Espere que estos se escriban solo en registros. En términos generales, la mayoría de las líneas registradas por su aplicación deben escribirse como DEBUG. |
RASTRO | Información más detallada. Espere que estos se escriban solo en registros. Desde la versión 1.2.12. [12] |
Niveles de registro personalizados
Log4j 2 permite a los usuarios definir sus propios niveles de registro. [13] Se proporciona una herramienta generadora de código fuente para crear registradores que admitan niveles de registro personalizados de manera idéntica a los niveles de registro integrados. Los niveles de registro personalizados pueden complementar o reemplazar los niveles de registro integrados.
Configuración de Log4j
Log4j se puede configurar [14] mediante un archivo de configuración o mediante código Java. Los archivos de configuración se pueden escribir en formato XML , JSON , YAML o de archivo de propiedades . Dentro de una configuración puede definir tres componentes principales: registradores, anexos y diseños. Configurar el registro a través de un archivo tiene la ventaja de que el registro se puede activar o desactivar sin modificar la aplicación que usa Log4j. Se puede permitir que la aplicación se ejecute con el cierre de sesión hasta que haya un problema, por ejemplo, y luego se puede volver a activar el registro simplemente modificando el archivo de configuración.
Los registradores [15] se denominan destinos de mensajes de registro. Son los nombres que conoce la aplicación Java. Cada registrador se puede configurar de forma independiente en cuanto al nivel de registro (FATAL, ERROR, etc.) que registra actualmente. En las primeras versiones de Log4j, estos se llamaban categoría y prioridad, pero ahora se llaman registrador y nivel, respectivamente. Un registrador puede enviar mensajes de registro a varios Appenders.
Las salidas reales son hechas por appenders . [16] Hay numerosos Appenders disponibles, con nombres descriptivos, como FileAppender, RollingFileAppender, ConsoleAppender, SocketAppender, SyslogAppender y SMTPAppender. Log4j 2 agregó Appenders que escriben en Apache Flume , la API de persistencia de Java , Apache Kafka , bases de datos NoSQL , archivos asignados en memoria, archivos de acceso aleatorio [17] y puntos finales ZeroMQ . Se pueden adjuntar múltiples agregadores a cualquier registrador, por lo que es posible registrar la misma información en múltiples salidas; por ejemplo, a un archivo localmente y a un escucha de socket en otra computadora.
Los anexos utilizan Layouts [18] para formatear las entradas del registro. Una forma popular de formatear archivos de registro de una línea a la vez es PatternLayout, que usa una cadena de patrón, muy parecida a la función printf de C / C ++ . También hay formateadores HTMLLayout y XMLLayout para usar cuando los formatos HTML o XML son más convenientes, respectivamente. Log4j 2 agregó diseños para CSV , formato de registro extendido Graylog (GELF), [19] JSON , YAML y RFC-5424. [20]
En Log4j 2, los filtros [21] se pueden definir en los elementos de configuración para brindar un control más detallado sobre qué entradas de registro deben ser procesadas por qué registradores y anexos. Además de filtrar por nivel de registro y coincidencia de expresiones regulares en la cadena del mensaje, Log4j 2 agregó filtros de ráfaga, filtros de tiempo, filtrado por otros atributos de eventos de registro como marcadores o mapa de contexto de subprocesos y filtros de script JSR 223 .
Para depurar una configuración que no funciona correctamente:
- En las configuraciones de Log4j 2, establezca el
status
atributo en TRACE para enviar la salida de registro de estado interno a la salida estándar . Para habilitar el registro de estado antes de que se encuentre la configuración, use la propiedad Java VM-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=trace
. - En Log4j 1, use la propiedad Java VM
-Dlog4j.debug
.
Para averiguar dónde se cargó un archivo de configuración log4j2.xml desde inspect getClass().getResource("/log4j2.xml")
.
También hay una configuración implícita "no configurada" o "predeterminada" de Log4j, la de una aplicación Java instrumentada con Log4j que carece de configuración de Log4j. Esto imprime una advertencia estándar de que el programa no está configurado y la URL del sitio web de Log4j, donde se pueden encontrar detalles sobre la advertencia y la configuración. Además de imprimir esta advertencia, una aplicación Log4j no configurada solo imprimirá las entradas de registro ERROR o FATAL en la salida estándar.
Ejemplo para Log4j 2
xml version = "1.0" encoding = "UTF-8"?> status = "trace" monitorInterval = "60" > name = "filename" > target / test.log name = "STDOUT" > pattern = "% d% p% c {1.} [% T]% m% n" /> name = "file" fileName = "$ {filename}" > % d% p% c {1.} [% T]% m% n registradores cuyo nombre comience con 'org.springframework' solo registrarán mensajes de nivel "info" o superior; si recupera Loggers usando el nombre de la clase (por ejemplo, Logger.getLogger (AClass.class)) y si AClass es parte del paquete org.springframework, pertenecerá a esta categoría -> name = "org.springframework" nivel = "info" aditividad = "falso" /> Ejemplo de filtro: para registradores cuyo nombre comienza con 'com.mycompany.myproduct', entradas de registro de nivel "debug" o superior cuyos datos de ThreadContextMap contienen el par clave-valor "test = 123", también envíe estas entradas de registro al appender "STDOUT". -> name = "com.mycompany.myproduct" level = "debug" additivity = "true" > key = "test" value = "123" /> ref = "STDOUT" /> De forma predeterminada, se registrarán todos los mensajes de registro de nivel "trace" o superior. Los mensajes de registro se envían al appender "archivo" y los mensajes de registro del nivel "error" y superior se enviarán al appender "STDOUT". -> level = "trace" > ref = "file" /> ref = "STDOUT" level = "error" />
Ejemplo de Log4j 1.2
xml version = "1.0" encoding = "UTF-8"?> un appender es un destino de salida, como la consola o un archivo; los nombres de los anexos se eligen arbitrariamente. -> name = "stdout" class = "org.apache.log4j.ConsoleAppender" > class = "org.apache.log4j.PatternLayout" > name = "ConversionPattern" value = "% d {ABSOLUTE }% 5p% c {1}:% L -% m% n " /> registradores de la categoría 'org.springframework' solo registrarán mensajes de nivel "info" o superior; si recupera Loggers usando el nombre de la clase (por ejemplo, Logger.getLogger (AClass.class)) y si AClass es parte del paquete org.springframework, pertenecerá a esta categoría -> name = "org.springframework" > value = "info" /> todo lo de Spring se configuró en "info" pero para la clase PropertyEditorRegistrySupport queremos un registro de "depuración" -> name = "org.springframework.beans.PropertyEditorRegistrySupport" > value = "debug" /> < / logger> name = "org.acegisecurity" > value = "info" /> todos los mensajes de registro de nivel "debug" o superior se registrarán, a menos que se defina lo contrario, todos los mensajes de registro se registrarán en el appender "stdout", a menos que se defina lo contrario -> value = "debug" /> ref = "stdout" />
TTCC
TTCC es un formato de mensaje utilizado por log4j. [22] TTCC es un acrónimo de Time Thread Category Component . Utiliza el siguiente patrón:
% r [% t]% -5p% c% x -% m% n
Dónde
Mnemotécnico | Descripción |
---|---|
% r | Se utiliza para generar la cantidad de milisegundos transcurridos desde la construcción del diseño hasta la creación del evento de registro. |
% t | Se usa para generar el nombre del hilo que generó el evento de registro. |
%pag | Se utiliza para generar la prioridad del evento de registro. |
%C | Se utiliza para generar la categoría del evento de registro. |
%X | Se utiliza para generar el NDC (contexto de diagnóstico anidado) asociado con el hilo que generó el evento de registro. [23] |
% X {clave} | Se utiliza para generar el MDC (contexto de diagnóstico mapeado) asociado con el hilo que generó el evento de registro para la clave especificada. [24] |
%metro | Se utiliza para generar el mensaje proporcionado por la aplicación asociado con el evento de registro. |
%norte | Se utiliza para generar el carácter o caracteres de nueva línea específicos de la plataforma . |
Salida de ejemplo
467 [main] INFO org.apache.log4j.examples.Sort - Saliendo del método principal.
Puertos
- log4c : un puerto para C. Log4C es una biblioteca de registro basada en C , publicada en SourceForge bajo la licencia LGPL . Para varios sistemas operativos Unix , se proporcionan los archivos autoconf y automake . En Windows, se proporciona un archivo Makefile para su uso con MSVC . Los desarrolladores también pueden optar por utilizar su propio sistema de creación para compilar la fuente, según los requisitos de ingeniería de su construcción. Una instancia de la biblioteca log4c se puede configurar mediante tres métodos: mediante variables de entorno , mediante programación o mediante un archivo de configuración XML . log4c tiene añadidos para archivos, secuencias y archivos asignados en memoria. (Sin adaptador de enchufe). La última versión es 1.2.4, lanzada en 2013, y el proyecto ya no se desarrolla activamente. [25]
- log4js : un puerto para JavaScript . Log4js está disponible bajo la licencia de Apache Software Foundation . Una característica especial de Log4js es la capacidad de registrar los eventos del navegador de forma remota en el servidor. Usando Ajax es posible enviar los eventos de registro en varios formatos ( XML , JSON , ASCII simple , etc.) al servidor para ser evaluados allí. Los siguientes añadidos se implementan para log4js : AjaxAppender, ConsoleAppender, FileAppender, JSConsoleAppender, MetatagAppender y WindowsEventsAppender. Se proporcionan las siguientes clases de diseño: BasicLayout, HtmlLayout, JSONLayout y XMLLayout. La última versión es 1.1, lanzada en 2008. [26]
- log4javascript : otro puerto para JavaScript. log4javascript es un marco de registro de JavaScript basado en log4j . La última versión es 1.4.9, lanzada en mayo de 2014. [27]
- JSNLog : un puerto para JavaScript . Coloca automáticamente los mensajes de los registradores de JavaScript en los registros del lado del servidor utilizando un componente del lado del servidor .NET que interactúa con Log4Net, NLog, Elmah o Common.Logging. Esto para proporcionar un registro integrado para los eventos del lado del cliente y del servidor. Los ID de solicitud correlacionan eventos relacionados con un usuario específico. La configuración se realiza a través de un archivo web.config del lado del servidor. Admite el registro de excepciones, incluidos los seguimientos de pila. En julio de 2014, la última versión era la 2.7.1 y se actualizaban periódicamente. [28]
- Apache Log4net : un puerto para Microsoft .NET Framework . El trabajo inicial fue realizado por Neoworks y fue donado a la Apache Software Foundation en febrero de 2004. El marco es similar al log4j original mientras aprovecha las nuevas características en el tiempo de ejecución de .NET. Proporciona contexto de diagnóstico anidado (NDC) y contexto de diagnóstico mapeado (MDC). La última versión es 2.0.8, lanzada en 2017. [29] [30]
- log4perl - Un puerto Perl del paquete de registro log4j ampliamente popular. La última versión es 1.49, lanzada en febrero de 2017. [31]
- Apache log4php : "Un marco de trabajo de registro versátil para PHP . Originalmente un puerto de Apache log4j a PHP, ha crecido para incluir varias características específicas de PHP". [32]
- PL-SQL-Logging-Utility es una adaptación de log4j en PL / SQL. [33]
- Log4db2 es una utilidad de registro para DB2 para LUW que usa instrucciones SQL con código SQL PL. [34]
- Apache Log4cxx : un marco de registro para C ++ con el patrón de Apache log4j, que usa Apache Portable Runtime para la mayoría de los códigos específicos de la plataforma y debería poder usarse en cualquier plataforma compatible con APR. Actualmente se encuentra en incubación. La última versión es 0.10.0, lanzada en 2008. [35]
- Log4r : una biblioteca de registro completa y flexible escrita en Ruby para su uso en programas de Ruby. Se inspiró en muchas de las características del proyecto Apache Log4j y las proporciona. [36]
Ver también
- Motosierra (visor de archivos de registro)
Referencias
- ^ "Historial de versiones de Apache Log4j 1.2" . apache.org . Fundación de software Apache . Consultado el 2 de septiembre de 2014 .
- ^ "Log4j - Cambios - Apache Log4j 2" . apache.org . Fundación de software Apache . Consultado el 21 de abril de 2017 .
- ^ "Inicio de sesión" . Logback.qos.ch . Consultado el 24 de julio de 2014 .
- ^ "Guía de Log4j 2 - Apache Log4j 2" . Logging.apache.org. 2014-07-12 . Consultado el 24 de julio de 2014 .
- ^ "Inicio | Ralph Goers | Registro con Log4j 2" . Ralph Goers .
- ^ "Guía de Log4j 2 - Apache Log4j 2: Noticias" . Logging.apache.org. 2014-07-12 . Consultado el 24 de julio de 2014 .
- ^ "El proyecto Apache ™ Logging Services ™ anuncia el fin de la vida útil de Log4j ™ 1; recomienda la actualización a Log4j 2" . blogs.apache.org. 2015-08-05 . Consultado el 3 de julio de 2016 .
- ^ "El nuevo log4j 2.0" . Grobmeier.de. 2012-12-05 . Consultado el 24 de julio de 2014 .
- ^ "Log4j - Descripción general - Apache Log4j 2" . logging.apache.org. 2016-06-05 . Consultado el 3 de julio de 2016 .
- ^ "Log4j 2 registradores asíncronos para registro de baja latencia - Apache Log4j 2" . Logging.apache.org. 2014-07-12 . Consultado el 24 de julio de 2014 .
- ^ "Disruptor por LMAX-Exchange" . Lmax-exchange.github.io . Consultado el 24 de julio de 2014 .
- ^ "Nivel (API Apache Log4j 1.2.17)" . Logging.apache.org. 2012-06-09 . Consultado el 24 de julio de 2014 .
- ^ "Niveles de registro personalizados" . Logging.apache.org. 2014-07-12 . Consultado el 16 de julio de 2016 .
- ^ "Configuración" . Logging.apache.org. 2016-07-05 . Consultado el 16 de julio de 2016 .
- ^ "Arquitectura" . Logging.apache.org. 2016-07-05 . Consultado el 16 de julio de 2016 .
- ^ "Anexos" . Logging.apache.org. 2016-07-05 . Consultado el 16 de julio de 2016 .
- ^ "RandomAccessFile" . docs.oracle.com. 2011-07-28 . Consultado el 16 de julio de 2016 .
- ^ "Diseños" . Logging.apache.org. 2016-07-05 . Consultado el 16 de julio de 2016 .
- ^ "GELF" . docs.graylog.org. 2016-06-08 . Consultado el 16 de julio de 2016 .
- ^ "RFC 5424 - El protocolo Syslog" . tools.ietf.org. 2009-03-01 . Consultado el 16 de julio de 2016 .
- ^ "Filtros" . Logging.apache.org. 2016-07-05 . Consultado el 16 de julio de 2016 .
- ^ "TTCCLayout (Apache Log4j 1.2.17 API)" . Logging.apache.org. 2012-06-09 . Consultado el 24 de julio de 2014 .
- ^ "Clase NDC" . Archivado desde el original el 20 de agosto de 2007 . Consultado el 24 de julio de 2014 .
- ^ "MDC (API Apache Log4j 1.2.17)" . Logging.apache.org. 2012-06-09 . Consultado el 24 de julio de 2014 .
- ^ "Logging Framework for C | Descargas de software de administración del sistema gratuitas en" . Sourceforge.net . Consultado el 24 de julio de 2014 .
- ^ "Log4js" . Log4js . Consultado el 29 de marzo de 2017 .
- ^ "un marco de registro de JavaScript" . log4javascript . Consultado el 24 de julio de 2014 .
- ^ "Registro de errores de JavaScript en el registro del lado del servidor" . JSNLog . Consultado el 24 de julio de 2014 .
- ^ "Apache log4net: Inicio" . Logging.apache.org. 2015-12-05 . Consultado el 8 de abril de 2016 .
- ^ "Se ha aceptado la versión 2.0.8 · apache / logging-log4net @ cd20f62" . GitHub .
- ^ "log4perl - log4j para Perl" . Mschilli.github.com . Consultado el 24 de julio de 2014 .
- ^ "Servicios de registro de Apache" . Apache.org . Consultado el 11 de marzo de 2015 .
- ^ "tmuth / Logger-A-PL-SQL-Logging-Utility - GitHub" . Github.com . Consultado el 24 de julio de 2014 .
- ^ "Log4db2 por angoca" . Angoca.github.io . Consultado el 24 de julio de 2014 .
- ^ "log4cxx - Cambios" . logging.apache.org .
- ^ "Manual de Log4r" . log4r.rubyforge.org. Archivado desde el original el 25 de diciembre de 2012 . Consultado el 13 de abril de 2017 .
Otras lecturas
- Gülcü, Ceki (febrero de 2010), The Complete Log4j Manual (2ª ed.), QOS.ch, p. 204, ISBN 978-2-9700369-0-6
- Gupta, Samudra (22 de junio de 2005), Pro Apache Log4j (2ª ed.), Apress , p. 224, ISBN 978-1-59059-499-5
enlaces externos
- Página web oficial