Use um appender do Log4j2 ou o Logtail para coletar logs de aplicações Java registrados pelo Log4j2 e enviá-los ao Simple Log Service para consulta e análise.
Visão geral do Log4j
O Log4j é um projeto open source da Apache que permite configurar destinos de log, como consoles, arquivos, componentes de GUI, servidores socket, registradores de eventos NT e daemons Syslog UNIX. Você pode controlar o formato de saída de cada entrada de log e ajustar a geração de logs definindo níveis de log, tudo por meio de um arquivo de configuração, sem modificar o código da aplicação. O Log4j consiste em três componentes:
-
layouts
Os layouts formatam as mensagens de log. Os layouts comuns incluem:
Layout
Descrição
HTMLLayout
Formata os logs como tabelas HTML.
SimpleLayout
Usa um formato de saída simples, como o formato padrão para mensagens de nível INFO.
PatternLayout
Gera logs em um formato personalizado. Permite especificar a ordem e o formato de elementos como timestamp, nível de log, nome da thread, nome da classe, nome do método e mensagem de log.
-
appenders
Os appenders definem os destinos de saída dos logs. Os appenders comuns incluem:
Appender
Descrição
ConsoleAppender
Envia os logs para o console.
FileAppender
Grava os logs em um arquivo.
DailyRollingFileAppender
Grava os logs em um arquivo e cria um novo arquivo de log diariamente.
RollingFileAppender
Direciona as mensagens de log para um arquivo até atingir um tamanho especificado. Ao alcançar o limite de tamanho, o arquivo é renomeado e um novo é criado.
JDBCAppender
Armazena as mensagens de log em um banco de dados.
-
loggers
Um logger captura mensagens de log e funciona como ponto de entrada para o registro de logs. Cada logger recebe um nível de log com base na importância ou gravidade. O Log4j define oito níveis de log em ordem decrescente de prioridade: OFF, FATAL, ERROR, WARN, INFO, DEBUG, TRACE e ALL. Loggers filhos herdam os níveis de log de seus pais. A tabela a seguir descreve os níveis de log.
Nível de log
Descrição
OFF
Desativa todo o registro de logs.
FATAL
Indica um evento de erro grave que causará a saída da aplicação.
ERROR
Sinaliza um evento de erro que ainda pode permitir que o sistema continue em execução.
WARN
Aponta uma situação potencialmente prejudicial.
INFO
Destaca o progresso da aplicação em um nível de granularidade mais amplo.
DEBUG
Fornece informações detalhadas úteis para depuração de aplicações.
TRACE
Rastreia a execução do programa, exibe variáveis e mostra o fluxo de execução.
ALL
Imprime todos os registros de log.
Um logger pode ser associado a vários appenders, mas um appender pode ser associado a apenas um layout.
Pré-requisitos
Crie um Project e um Logstore. Para obter mais informações, consulte Gerencie Projects e Gerencie Logstores.
Se você usar um usuário RAM em vez de uma conta Alibaba Cloud, conceda ao usuário RAM as permissões para gravar dados em um Logstore. Para conceder as permissões, primeiro crie uma política personalizada e depois conceda permissões ao usuário RAM.
Procedimento
Os exemplos neste tópico usam Java e Log4j2. Também é possível usar o Log4j para programas em outras linguagens, como C, C++, .NET e PL/SQL. A sintaxe e o uso são os mesmos do Java.
Etapa 1: Adicionar o arquivo de configuração do Log4j2
-
Adicione dependências ao seu projeto 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 o arquivo de configuração.
Por padrão, o Log4j2 procura o arquivo de configuração no classpath. Se o arquivo não existir, crie-o manualmente. O exemplo a seguir usa log4j2.xml. Dois appenders são definidos para enviar logs ao console e ao arquivo
app.log, respectivamente. O nível do logger raiz é definido comoerrorcom saída para o console. O logger chamadocom.example.demo.logé definido comowarncom saída para o arquivo. Para obter mais informações sobre como configurar o Log4j2, consulte a documentação oficial em 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> -
Use o logger.
Escreva um código de teste para obter uma instância do logger e gerar logs:
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"); } -
Exemplo de saída de log:
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
Etapa 2: Coletar logs do Log4j
O appender do Log4j2 é um método de coleta integrado. Para aplicações já integradas ao Log4j2, basta uma configuração mínima para enviar logs em tempo real sem gravá-los no disco do servidor. Este método é adequado para aplicações de big data que exigem processamento em tempo real de grandes volumes de dados de log.
Para coletar logs usando o Logtail, instale o agente Logtail no seu servidor. O agente Logtail oferece suporte a vários plug-ins de processamento.
Via Log4j2 appender
-
Adicione dependências ao seu projeto 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 o arquivo de configuração.
O exemplo a seguir usa o arquivo de configuração XML
log4j2.xml. Se o arquivo não existir, crie-o no diretório raiz do projeto. Configure o appenderLoghube o logger da seguinte forma:<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>Os parâmetros
project,Logstore,endpoint,accessKeyIdeaccessKeySecretsão obrigatórios. Parâmetros opcionais assumem valores padrão se não forem especificados. A tabela a seguir descreve os parâmetros.Parâmetro
Descrição
project
Nome do seu Project no Simple Log Service.
Logstore
Nome do seu Logstore no Simple Log Service.
endpoint
Endpoint público do Simple Log Service. Para obter mais informações, consulte Service endpoint.
accessKeyId
AccessKey ID. Para obter mais informações, consulte Crie um AccessKey.
accessKeySecret
AccessKey secret. Para obter mais informações, consulte Crie um AccessKey.
-
Exemplo de código de teste:
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); } }
Via Logtail
Ao configurar o Logtail, especifique o caminho do arquivo. Certifique-se de que os logs da aplicação possam ser gravados nos arquivos de log.
O Simple Log Service fornece um assistente de configuração para coleta rápida de logs de texto usando o Logtail. Se sua instância ECS e o Project do Simple Log Service estiverem na mesma conta e na mesma região, consulte Collect text logs from servers. Caso contrário, consulte Manually install Logtail to collect text logs from servers.
Etapa 3: Visualizar logs
Faça login no console do Simple Log Service.
-
Na seção Projects, clique em no projeto desejado.

-
Na aba , clique em no logstore desejado.

Verifique se os dados de log foram carregados. No Logstore, clique em Consumption Preview para visualizar rapidamente os logs. Para obter mais informações, consulte Query and analysis quick start.
-
Consulte e analise os logs.
ImportanteApós carregar os logs em um Logstore, crie um índice antes de consultá-los e analisá-los. Para obter informações sobre a configuração de índice, consulte Crie indexes.
Insira uma instrução de consulta e clique em Last 15 Minutes para especificar um intervalo de tempo. Veja abaixo um exemplo de log:
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 e analise logs na página do Logstore.
Insira uma instrução de consulta para visualizar, pesquisar e filtrar dados de log. Para obter mais informações, consulte Query and analyze logs. Exemplos:
-
Consulte as três principais localizações com mais erros na última hora.
level: ERROR | select location ,count(*) as count GROUP BY location ORDER BY count DESC LIMIT 3 -
Conte o número de logs para cada nível de log nos últimos 15 minutos.
| select level ,count(*) as count GROUP BY level ORDER BY count DESC
-
Solução de problemas
Se a coleta de logs falhar após configurar o appender do Log4j2, verifique as causas comuns a seguir.
1. Seleção de dependência
O Spring Boot usa o Logback por padrão. Se sua aplicação utilizar o Spring Boot, adicione a dependência aliyun-log-logback-appender em vez do appender do Log4j2. Caso sua aplicação use o Log4j2, utilize a dependência aliyun-log-log4j2-appender.
2. Configuração de endpoint
Certifique-se de ter configurado o endpoint público correto, como cn-hangzhou.log.aliyuncs.com.
3. Permissões de AccessKey ID e AccessKey secret
Verifique se o usuário do Resource Access Management (RAM) recebeu a permissão AliyunLogFullAccess ou permissões de gravação no LogStore de destino.
4. Nomes de Project e LogStore
Confirme se os nomes de Project e LogStore na sua configuração correspondem aos nomes exibidos no console do Simple Log Service.
Documentos relacionados
Para aprender a usar o Logtail para coletar logs de um servidor, consulte Collect text logs from servers. Vários plug-ins estão disponíveis para processamento. Para obter mais informações, consulte Data parsing plugins.
Se a página de visualização estiver em branco ou nenhum dado aparecer na página de consulta após usar o Logtail para coletar logs, consulte Troubleshoot Logtail collection errors. Erros como falhas de análise regex, caminhos de arquivo incorretos ou tráfego excedendo a capacidade do shard podem ocorrer. Para visualizar erros de coleta do Logtail, consulte How do I view Logtail collection errors?. Para erros comuns de coleta de dados, consulte Common collection errors.
Para casos de uso e perguntas frequentes (FAQs) sobre a coleta de logs do Log4j com um appender do Log4j2, consulte Log4j2 Appender. Para versões anteriores, consulte Log4j Appender.
Ao usar um appender do Log4j2 para coletar logs do Log4j, configure seu
accessKeyIdeaccessKeySecret. Para obter informações sobre como obtê-los, consulte Crie um AccessKey. Para configurar o endpoint do Simple Log Service, consulte Service endpoint.