Puede utilizar un appender de Log4j2 o Logtail para recolectar los registros de aplicaciones Java generados por Log4j2 y enviarlos a Simple Log Service para su consulta y análisis.
Descripción general de Log4j
Log4j es un proyecto de código abierto de Apache que permite configurar destinos de registros como consolas, archivos, componentes GUI, servidores socket, registradores de eventos NT y demonios Syslog de UNIX. Es posible controlar el formato de salida de cada entrada de registro y realizar fine-tune de la generación de registros mediante la definición de niveles, todo a través de un archivo de configuración sin modificar el código de la aplicación. Log4j se compone de tres elementos:
-
layouts
Los layouts dan formato a los mensajes de registro. Los layouts más comunes incluyen:
Layout
Descripción
HTMLLayout
Formatea los registros como tablas HTML.
SimpleLayout
Utiliza un formato de salida simple, como el formato predeterminado para mensajes de nivel INFO.
PatternLayout
Genera registros en un formato personalizado. Permite especificar el orden y el formato de elementos como la marca de tiempo, el nivel de registro, el nombre del hilo, el nombre de la clase, el nombre del método y el mensaje de registro.
-
appenders
Los appenders definen los destinos de salida de los registros. Los appenders más comunes incluyen:
Appender
Descripción
ConsoleAppender
Envía los registros a la consola.
FileAppender
Escribe los registros en un archivo.
DailyRollingFileAppender
Escribe los registros en un archivo y crea un nuevo archivo de registro cada día.
RollingFileAppender
Escribe mensajes de registro en un archivo hasta alcanzar un tamaño especificado. Cuando el archivo alcanza el límite de tamaño, se le cambia el nombre y se crea uno nuevo.
JDBCAppender
Guarda los mensajes de registro en una base de datos.
-
loggers
Un logger captura mensajes de registro y funciona como punto de entrada para el registro. A cada logger se le asigna un nivel basado en su importancia o gravedad. Log4j define ocho niveles de registro en orden descendente de prioridad: OFF, FATAL, ERROR, WARN, INFO, DEBUG, TRACE y ALL. Los loggers secundarios heredan los niveles de sus padres. La siguiente tabla describe los niveles de registro.
Nivel de registro
Descripción
OFF
Desactiva todos los registros.
FATAL
Indica un evento de error grave que provocará la salida de la aplicación.
ERROR
Indica un evento de error que podría permitir que el sistema continúe ejecutándose.
WARN
Indica una situación potencialmente dañina.
INFO
Resalta el progreso de la aplicación a un nivel de grano grueso.
DEBUG
Proporciona información detallada útil para depurar aplicaciones.
TRACE
Rastrea la ejecución del programa, muestra variables e indica el flujo de ejecución.
ALL
Imprime todos los registros.
Un logger puede asociarse con varios appenders, pero un appender solo puede asociarse con un layout.
Requisitos previos
Se ha creado un Project y un Logstore. Para obtener más información, consulte Manage Projects y Manage Logstores.
Si utiliza un usuario RAM en lugar de una cuenta de Alibaba Cloud, debe otorgar al usuario RAM los permisos permissions to write data to a Logstore. Para conceder estos permisos, primero debe create a custom policy y luego grant permissions to the RAM user.
Procedimiento
Los ejemplos de este tema utilizan Java y Log4j2. También puede usar Log4j para programas en otros lenguajes, como C, C++, .NET y PL/SQL. La sintaxis y el uso son los mismos que en Java.
Paso 1: Agregar el archivo de configuración de Log4j2
-
Agregue dependencias a su proyecto Maven.
<dependencies> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.23.1</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.23.1</version> </dependency> </dependencies> -
Modifique el archivo de configuración.
De forma predeterminada, Log4j2 busca el archivo de configuración en el classpath. Si el archivo no existe, créelo manualmente. El siguiente ejemplo utiliza log4j2.xml. Se definen dos appenders para enviar registros a la consola y al archivo
app.log, respectivamente. El nivel del logger raíz se establece enerrorcon salida a la consola. El logger llamadocom.example.demo.logse configura enwarncon salida al archivo. Para obtener más información sobre cómo configurar Log4j2, consulte la documentación oficial en Log4j – Configuring Log4j 2 (apache.org)<!-- status="WARN" sets the internal status of Log4j 2 itself, not the application's logging. It is used to capture and report potential issues during the configuration process. --> <Configuration status="WARN"> <!-- Start: Define two appenders for log output --> <Appenders> <!-- Defines a console appender named "Console". Logs are printed to the standard system output. --> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS zzz} [%t] %-5level %logger{36} - %msg%n"/> </Console> <!-- Defines a file appender named "MyFile". Logs are written to the "app.log" file. --> <File name="MyFile" fileName="app.log"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss:SSS zzz} [%t] %-5level %logger{36} - %msg%n"/> </File> </Appenders> <!-- End: Define two appenders for log output --> <!-- Start: Configure logger behavior --> <Loggers> <!-- Defines a logger named "com.example.demo.log" and sets its level to warn. It references the "MyFile" appender, which means logs at the warn level and above from this logger are sent to "MyFile". --> <Logger name="com.example.demo.log" level="warn"> <AppenderRef ref="MyFile" /> </Logger> <!-- Defines the root logger and sets its level to error. It references the "Console" appender, which means logs at the error level and above are sent to the console. --> <Root level="error"> <AppenderRef ref="Console" /> </Root> </Loggers> <!-- End: Configure logger behavior --> </Configuration> -
Utilice el logger.
Escriba código de prueba para obtener una instancia de logger y generar registros:
public void logExampleDemo() { // Get the logger instance named "com.example.demo.log". Logger logger = LogManager.getLogger("com.example.demo.log"); // Record log messages at different levels. logger.trace("trace level"); logger.debug("debug level"); logger.info("info level"); logger.warn("warn level"); logger.error("error level"); logger.fatal("fatal level"); } -
Ejemplo de salida de registros:
2024-05-28 13:37:16:295 CST [http-nio-8080-exec-8] TRACE com.example.demo.log - trace level 2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] DEBUG com.example.demo.log - debug level 2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] INFO com.example.demo.log - info level 2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] WARN com.example.demo.log - warn level 2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] ERROR com.example.demo.log - error level 2024-05-28 13:37:16:296 CST [http-nio-8080-exec-8] FATAL com.example.demo.log - fatal level
Paso 2: Recolectar registros Log4j
El appender de Log4j2 es un método de recolección integrado. Para aplicaciones ya integradas con Log4j2, se requiere una configuración mínima para enviar registros en tiempo real sin escribirlos en el disco del servidor. Este método es adecuado para aplicaciones de big data que necesitan procesar grandes volúmenes de datos de registro en tiempo real.
Para recolectar registros mediante Logtail, debe instalar el agente Logtail en su servidor. El agente Logtail admite diversos complementos de procesamiento.
Mediante appender Log4j2
-
Agregue dependencias a su proyecto Maven.
<dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>2.5.0</version> </dependency> <dependency> <groupId>com.aliyun.openservices</groupId> <artifactId>aliyun-log-log4j2-appender</artifactId> <version>0.1.12</version> </dependency> -
Modifique el archivo de configuración.
El siguiente ejemplo utiliza el archivo de configuración XML
log4j2.xml. Si el archivo no existe, créelo en el directorio raíz del proyecto. Configure el appenderLoghuby el logger de la siguiente manera:<Appenders> <Loghub name="Loghub" project="your project" logStore="your logStore" endpoint="your project endpoint" accessKeyId="your accessKey id" accessKeySecret="your accessKey secret" totalSizeInBytes="104857600" maxBlockMs="0" ioThreadCount="8" batchSizeThresholdInBytes="524288" batchCountThreshold="4096" lingerMs="2000" retries="10" baseRetryBackoffMs="100" maxRetryBackoffMs="100" topic="your topic" source="your source" timeFormat="yyyy-MM-dd'T'HH:mmZ" timeZone="UTC" ignoreExceptions="true"> <PatternLayout pattern="%d %-5level [%thread] %logger{0}: %msg"/> </Loghub> </Appenders> <Loggers> <Root level="warn"> <AppenderRef ref="Loghub"/> </Root> </Loggers>Los parámetros
project,Logstore,endpoint,accessKeyIdyaccessKeySecretson obligatorios. Los parámetros opcionales utilizan valores predeterminados si no se especifican. La siguiente tabla describe los parámetros.Parámetro
Descripción
project
El nombre de su Project en Simple Log Service.
Logstore
El nombre de su Logstore en Simple Log Service.
endpoint
El endpoint público para Simple Log Service. Para obtener más información, consulte Service endpoint.
accessKeyId
El AccessKey ID. Para obtener más información, consulte Create an AccessKey.
accessKeySecret
El AccessKey secret. Para obtener más información, consulte Create an AccessKey.
-
Ejemplo de código de prueba:
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class Log4j2AppenderExample { private static final Logger LOGGER = LogManager.getLogger(Log4j2AppenderExample.class); public static void main(String[] args) throws InterruptedException { LOGGER.trace("log4j2 trace log"); LOGGER.debug("log4j2 debug log"); LOGGER.info("log4j2 info log"); LOGGER.warn("log4j2 warn log"); LOGGER.error("log4j2 error log", new RuntimeException("Runtime Exception")); Thread.sleep(1000 * 5); } }
Mediante Logtail
Al configurar Logtail, debe especificar la ruta del archivo. Asegúrese de que los registros de la aplicación puedan escribirse en los archivos de registro.
Simple Log Service proporciona un asistente de configuración para la recolección rápida de registros de texto mediante Logtail. Si su instancia ECS y el Project de Simple Log Service están bajo la misma cuenta y en la misma región, consulte Collect text logs from servers. De lo contrario, consulte Manually install Logtail to collect text logs from servers.
Paso 3: Consultar registros
Inicie sesión en la consola de Simple Log Service.
-
En la sección Projects, haga clic en el proyecto deseado.

-
En la pestaña , haga clic en el logstore deseado.

Compruebe que los datos de registro se hayan cargado. En el Logstore, haga clic en Consumption Preview para ver rápidamente los registros. Para obtener más información, consulte Query and analysis quick start.
-
Consulte y analice los registros.
ImportanteDespués de cargar registros en un Logstore, debe create an index antes de poder consultarlos y analizarlos. Para obtener información sobre la configuración de índices, consulte Create indexes.
Introduzca una sentencia de consulta y luego haga clic en Last 15 Minutes para especificar un rango de tiempo. A continuación se muestra un ejemplo de registro:
level: ERROR location: com.aliyun.openservices.log.log4j.example.Log4jAppenderExample.main(Log4jAppenderExample.java:16) message: error log throwable: java.lang.RuntimeException: xxx thread: main time: 2018-01-02T03:15+0000 log: 0 [main] ERROR com.aliyun.openservices.log.log4j.example.Log4jAppenderExample - error log __source__: xxx __topic__: yyyConsulte y analice registros en la página del Logstore.
Introduzca una sentencia de consulta para ver, buscar y filtrar datos de registro. Para obtener más información, consulte Query and analyze logs. Ejemplos:
-
Consulte las tres ubicaciones principales con más errores en la última hora.
level: ERROR | select location ,count(*) as count GROUP BY location ORDER BY count DESC LIMIT 3 -
Cuente el número de registros para cada nivel de registro en los últimos 15 minutos.
| select level ,count(*) as count GROUP BY level ORDER BY count DESC
-
Solución de problemas
Si la recolección de registros falla después de configurar el appender Log4j2, revise las siguientes causas comunes.
1. Selección de dependencias
Spring Boot utiliza Logback de forma predeterminada. Si su aplicación usa Spring Boot, agregue la dependencia aliyun-log-logback-appender en lugar del appender Log4j2. Si su aplicación utiliza Log4j2, use la dependencia aliyun-log-log4j2-appender.
2. Configuración del endpoint
Asegúrese de haber configurado el endpoint público correcto, como cn-hangzhou.log.aliyuncs.com.
3. Permisos de AccessKey ID y AccessKey secret
Asegúrese de que el usuario de Resource Access Management (RAM) tenga concedido el permiso AliyunLogFullAccess o permisos de escritura en el LogStore destino.
4. Nombres de Project y LogStore
Verifique que los nombres de Project y LogStore en su configuración coincidan con los nombres mostrados en la consola de Simple Log Service.
Documentos relacionados
To learn how to use Logtail to collect logs from a server, see Collect text logs from servers. Various plug-ins are available for processing. For more information, see Data parsing plugins.
Si la página de vista previa está en blanco o no aparecen datos en la página de consulta después de usar Logtail para recolectar registros, consulte Troubleshoot Logtail collection errors. Pueden ocurrir errores como fallos en el análisis de expresiones regulares, rutas de archivo incorrectas o tráfico que excede la capacidad del shard. Para ver errores de recolección de Logtail, consulte How do I view Logtail collection errors?. Para errores comunes de recolección de datos, consulte Common collection errors.
Para casos de uso y preguntas frecuentes (FAQ) sobre la recolección de registros Log4j con un appender Log4j2, consulte Log4j2 Appender. Para versiones anteriores, consulte Log4j Appender.
Al usar un appender Log4j2 para recolectar registros Log4j, debe configurar su
accessKeyIdyaccessKeySecret. Para obtener información sobre cómo conseguirlos, consulte Create an AccessKey. Para configurar el endpoint de Simple Log Service, consulte Service endpoint.