Utilisez un appender Log4j2 ou Logtail pour collecter les journaux d'application Java enregistrés par Log4j2 et les envoyer à Simple Log Service afin de les interroger et de les analyser.
Présentation de Log4j
Log4j est un projet open source Apache qui vous permet de configurer des destinations de journalisation telles que les consoles, les fichiers, les composants graphiques, les serveurs socket, les enregistreurs d'événements NT et les démons Syslog UNIX. Vous pouvez contrôler le format de sortie de chaque entrée de journal et affiner la génération des journaux en définissant des niveaux de journalisation, le tout via un fichier de configuration sans modifier le code de l'application. Log4j se compose de trois composants :
-
layouts
Les layouts formatent les messages de journal. Les layouts courants incluent :
Layout
Description
HTMLLayout
Formate les journaux sous forme de tableaux HTML.
SimpleLayout
Utilise un format de sortie simple, tel que le format par défaut pour les messages de niveau INFO.
PatternLayout
Affiche les journaux dans un format personnalisé. Vous pouvez spécifier l'ordre et le format des éléments tels que l'horodatage, le niveau de journalisation, le nom du thread, le nom de la classe, le nom de la méthode et le message de journal.
-
appenders
Les appenders définissent les destinations de sortie des journaux. Les appenders courants incluent :
Appender
Description
ConsoleAppender
Affiche les journaux dans la console.
FileAppender
Affiche les journaux dans un fichier.
DailyRollingFileAppender
Affiche les journaux dans un fichier et crée un nouveau fichier de journal chaque jour.
RollingFileAppender
Affiche les messages de journal dans un fichier jusqu'à une taille spécifiée. Lorsque le fichier atteint la limite de taille, il est renommé et un nouveau fichier est créé.
JDBCAppender
Enregistre les messages de journal dans une base de données.
-
loggers
Un logger capture les messages de journal et sert de point d'entrée pour la journalisation. Chaque logger reçoit un niveau de journalisation basé sur son importance ou sa gravité. Log4j définit huit niveaux de journalisation par ordre de priorité décroissante : OFF, FATAL, ERROR, WARN, INFO, DEBUG, TRACE et ALL. Les loggers enfants héritent des niveaux de journalisation de leurs parents. Le tableau suivant décrit les niveaux de journalisation.
Niveau de journalisation
Description
OFF
Désactive toute journalisation.
FATAL
Indique un événement d'erreur grave qui entraînera l'arrêt de l'application.
ERROR
Indique un événement d'erreur qui pourrait encore permettre au système de continuer à fonctionner.
WARN
Indique une situation potentiellement dangereuse.
INFO
Met en évidence la progression de l'application à un niveau grossier.
DEBUG
Fournit des informations détaillées utiles pour le débogage des applications.
TRACE
Trace l'exécution du programme, affiche les variables et montre le flux d'exécution.
ALL
Affiche tous les enregistrements de journal.
Un logger peut être associé à plusieurs appenders, mais un appender ne peut être associé qu'à un seul layout.
Prérequis
Vous avez créé un Project et un Logstore. Pour plus d'informations, consultez Gérer les Projects et Gérer les Logstores.
Si vous utilisez un utilisateur RAM au lieu d'un compte Alibaba Cloud, vous devez accorder à l'utilisateur RAM les autorisations d'écriture de données dans un Logstore. Pour accorder ces autorisations, vous devez d'abord créer une stratégie personnalisée puis accorder des autorisations à l'utilisateur RAM.
Procédure
Les exemples de cette rubrique utilisent Java et Log4j2. Vous pouvez également utiliser Log4j pour des programmes dans d'autres langages, tels que C, C++, .NET et PL/SQL. La syntaxe et l'utilisation sont identiques à celles de Java.
Étape 1 : Ajouter le fichier de configuration Log4j2
-
Ajoutez les dépendances à votre projet 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> -
Modifiez le fichier de configuration.
Par défaut, Log4j2 recherche le fichier de configuration dans le classpath. Si le fichier n'existe pas, créez-le manuellement. L'exemple suivant utilise log4j2.xml. Deux appenders sont définis pour afficher les journaux respectivement dans la console et dans le fichier
app.log. Le niveau du logger racine est défini surerroravec une sortie vers la console. Le logger nommécom.example.demo.logest défini surwarnavec une sortie vers le fichier. Pour plus d'informations sur la configuration de Log4j2, consultez la documentation officielle à l'adresse 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> -
Utilisez le logger.
Écrivez un code de test pour obtenir une instance de logger et générer des journaux :
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"); } -
Exemple de sortie de journal :
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
Étape 2 : Collecter les journaux Log4j
L'appender Log4j2 est une méthode de collecte intégrée. Pour les applications déjà intégrées à Log4j2, une configuration minimale est nécessaire pour envoyer les journaux en temps réel sans les écrire sur le disque d'un serveur. Cette méthode convient aux applications Big Data qui nécessitent un traitement en temps réel de grands volumes de données de journalisation.
Pour collecter les journaux à l'aide de Logtail, installez l'agent Logtail sur votre serveur. L'agent Logtail prend en charge divers plug-ins de traitement.
Via Log4j2 appender
-
Ajoutez les dépendances à votre projet 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> -
Modifiez le fichier de configuration.
L'exemple suivant utilise le fichier de configuration XML
log4j2.xml. Si le fichier n'existe pas, créez-le dans le répertoire racine du projet. Configurez l'appenderLoghubet le logger comme suit :<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>Les paramètres
project,Logstore,endpoint,accessKeyIdetaccessKeySecretsont obligatoires. Les paramètres facultatifs utilisent des valeurs par défaut s'ils ne sont pas spécifiés. Le tableau suivant décrit les paramètres.Paramètre
Description
project
Le nom de votre Project dans Simple Log Service.
Logstore
Le nom de votre Logstore dans Simple Log Service.
endpoint
L'endpoint public pour Simple Log Service. Pour plus d'informations, consultez Endpoint de service.
accessKeyId
L'AccessKey ID. Pour plus d'informations, consultez Créer un AccessKey.
accessKeySecret
Le secret AccessKey. Pour plus d'informations, consultez Créer un AccessKey.
-
Exemple de code de test :
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
Lorsque vous configurez Logtail, vous devez spécifier le chemin du fichier. Assurez-vous que les journaux d'application peuvent être écrits dans les fichiers de journalisation.
Simple Log Service fournit un assistant de configuration pour la collecte rapide de journaux texte à l'aide de Logtail. Si votre instance ECS et votre Project Simple Log Service relèvent du même compte et se trouvent dans la même région, consultez Collecter des journaux texte depuis des serveurs. Sinon, consultez Installer manuellement Logtail pour collecter des journaux texte depuis des serveurs.
Étape 3 : Consulter les journaux
Connectez-vous à la console Simple Log Service.
-
Dans la section Projects, cliquez sur celui que vous souhaitez utiliser.

-
Dans l'onglet , cliquez sur le logstore souhaité.

Vérifiez que les données de journal sont téléchargées. Dans le Logstore, cliquez sur Consumption Preview pour afficher rapidement les journaux. Pour plus d'informations, consultez Démarrage rapide de l'interrogation et de l'analyse.
-
Interrogez et analysez les journaux.
ImportantUne fois les journaux téléchargés dans un Logstore, vous devez créer un index avant de pouvoir les interroger et les analyser. Pour plus d'informations sur la configuration des index, consultez Créer des index.
Saisissez une instruction de requête, puis cliquez sur Last 15 Minutes pour spécifier une plage de temps. Voici un exemple de journal :
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__: yyyInterrogez et analysez les journaux sur la page Logstore.
Saisissez une instruction de requête pour afficher, rechercher et filtrer les données de journalisation. Pour plus d'informations, consultez Interroger et analyser les journaux. Exemples :
-
Interrogez les trois emplacements présentant le plus d'erreurs au cours de la dernière heure.
level: ERROR | select location ,count(*) as count GROUP BY location ORDER BY count DESC LIMIT 3 -
Comptez le nombre de journaux pour chaque niveau de journalisation au cours des 15 dernières minutes.
| select level ,count(*) as count GROUP BY level ORDER BY count DESC
-
Dépannage
Si la collecte des journaux échoue après avoir configuré l'appender Log4j2, vérifiez les causes courantes suivantes.
1. Sélection des dépendances
Spring Boot utilise Logback par défaut. Si votre application utilise Spring Boot, ajoutez la dépendance aliyun-log-logback-appender au lieu de l'appender Log4j2. Si votre application utilise Log4j2, utilisez la dépendance aliyun-log-log4j2-appender.
2. Configuration de l'endpoint
Assurez-vous d'avoir configuré le bon endpoint public, tel que cn-hangzhou.log.aliyuncs.com.
3. Autorisations AccessKey ID et AccessKey secret
Assurez-vous que l'utilisateur Resource Access Management (RAM) dispose de l'autorisation AliyunLogFullAccess ou des autorisations d'écriture sur le LogStore cible.
4. Noms Project et LogStore
Assurez-vous que les noms Project et LogStore dans votre configuration correspondent aux noms affichés dans la console Simple Log Service.
Documentation connexe
Pour savoir comment utiliser Logtail pour collecter des journaux depuis un serveur, consultez Collecter des journaux texte depuis des serveurs. Divers plug-ins sont disponibles pour le traitement. Pour plus d'informations, consultez Plug-ins d'analyse des données.
Si la page d'aperçu est vide ou si aucune donnée n'apparaît sur la page de requête après avoir utilisé Logtail pour collecter des journaux, consultez Dépanner les erreurs de collecte Logtail. Des erreurs telles que des échecs d'analyse regex, des chemins de fichier incorrects ou un trafic dépassant la capacité du shard peuvent survenir. Pour afficher les erreurs de collecte Logtail, consultez Comment afficher les erreurs de collecte Logtail ?. Pour les erreurs de collecte de données courantes, consultez Erreurs de collecte courantes.
Pour les cas d'utilisation et la foire aux questions (FAQ) sur la collecte des journaux Log4j avec un appender Log4j2, consultez Log4j2 Appender. Pour les versions antérieures, consultez Log4j Appender.
Lors de l'utilisation d'un appender Log4j2 pour collecter les journaux Log4j, vous devez configurer vos
accessKeyIdetaccessKeySecret. Pour savoir comment les obtenir, consultez Créer un AccessKey. Pour configurer l'endpoint Simple Log Service, consultez Endpoint de service.