Composition des composants Log4j
Log4j se compose de trois composants importants :
1. Priorité des informations du journal (Logger)
2. La destination de sortie des informations du journal (Appender)
3. Format de sortie (Mise en page) des informations du journal.
résumé:
Les priorités des informations de journal de haut en bas incluent ERROR, WARN, INFO et DEBUG, qui sont utilisées respectivement pour spécifier l'importance de ces informations de journal ;
La destination de sortie des informations du journal spécifie si le journal sera imprimé sur la console ou dans un fichier ;
Le format de sortie contrôle le contenu d'affichage des informations du journal.
Présentation de Log4j
Log4j est un projet open source d'Apache. En utilisant Log4j, nous pouvons contrôler la destination de la transmission des informations de journal vers les consoles, les fichiers, les composants GUI et même les serveurs socket, les enregistreurs d'événements NT, les démons Syslog UNIX, etc. le format de sortie de chaque journal. En définissant le niveau de chaque information de journal, nous pouvons contrôler le processus de génération de journaux plus en détail. log4j-- journal pour Java (journal Java).
Adresse de téléchargement de Log4j : http://logging.apache.org/log4j/2.x/download.html
Format du fichier de configuration Log4j
Log4j prend en charge deux formats de fichiers de configuration :
1. Fichiers au format XML
2. Fichiers au format propriétés
Vous pouvez également ne pas utiliser du tout le fichier de configuration, mais configurer l'environnement Log4j en code. Cependant, l'utilisation de fichiers de configuration rendra votre application plus flexible.
Fichier de configuration de définition Log4j
1. Configurez le logger racine
Sa syntaxe est :
Description du paramètre :
Le niveau est la priorité de la journalisation, qui est divisée en OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL ou le niveau que vous définissez.
Désactivé : le niveau le plus élevé, utilisé pour désactiver toute journalisation
Fatal : indique que chaque événement d'erreur fatale entraînera la fermeture de l'application.
Erreur : indique que même si un événement d'erreur se produit, il n'affecte toujours pas le fonctionnement continu du système.
Avertir : indique qu'une situation d'erreur potentielle se produira
Info : généralement utilisé au niveau grossier, en mettant l'accent sur l'ensemble du processus d'exécution de l'application.
Débogage : de manière générale et à un niveau grossier, en mettant l'accent sur l'ensemble du processus d'exécution de l'application.
Tout : le niveau le plus bas, utilisé pour activer toute la journalisation.
Log4j recommande d'utiliser seulement quatre niveaux. Les priorités de haut en bas sont ERROR, WARN, INFO et DEBUG. Grâce aux niveaux définis ici, vous pouvez contrôler l'activation et la désactivation du niveau correspondant d'informations de journal dans l'application.
appenderName fait référence à l'endroit où les informations du journal sont sorties et plusieurs destinations de sortie peuvent être spécifiées en même temps.
2. Configurez la destination de sortie des informations du journal Appender
Sa syntaxe est :
log4j.appender.appenderName.option1 = valeur1
...
log4j.appender.appenderName.option = valeurN
org.apache.log4j.ConsoleAppender(Console)
org.apache.log4j.FileAppender(Fichier)
org.apache.log4j.DailyRollingFileAppender (génère un fichier journal chaque jour)
org.apache.log4j.RollingFileAppender (génère un nouveau fichier lorsque la taille du fichier atteint la taille spécifiée)
org.apache.log4j.WriterAppender (envoie les informations du journal au format streaming à n'importe quel endroit spécifié)
3. Configurez le format des informations du journal
La syntaxe est :
log4j.appender.appenderName.layout.option1 = valeur1 …
log4j.appender.appenderName.layout.option = valeurN
org.apache.log4j.HTMLLayout (mise en page au format tableau HTML),
org.apache.log4j.PatternLayout (peut spécifier de manière flexible des modèles de mise en page),
org.apache.log4j.SimpleLayout (contient le niveau et la chaîne d'informations des informations du journal),
org.apache.log4j.TTCCLayout (contient l'heure de génération du journal, le thread, la catégorie, etc.)
Log4J utilise un format d'impression similaire à la fonction printf en langage C pour formater les informations du journal. Les paramètres d'impression sont les suivants :
%mSortez le message spécifié dans le code
Priorité de sortie %p, à savoir DEBUG, INFO, WARN, ERROR, FATAL
%r affiche le nombre de millisecondes qu'il a fallu entre le démarrage de l'application et la sortie des informations du journal.
%c affiche la catégorie à laquelle il appartient, généralement le nom complet de la classe.
%tAfficher le nom du thread qui a généré l'événement de journal
%n génère un caractère de retour chariot et de saut de ligne, qui est « rn » sur la plate-forme Windows et « n » sur la plate-forme Unix.
%d affiche la date ou l'heure du point temporel du journal. Le format par défaut est ISO8601. Vous pouvez également spécifier le format ultérieurement, par exemple : %d{aaaMMMMjjHH:mm:ss,SSS}. 2002 22:10 :28,921
%l Affiche l'emplacement où l'événement de journal s'est produit, y compris le nom de la catégorie, le thread où il s'est produit et le numéro de ligne dans le code. Exemple : Testlog4.main(TestLog4.java:10)
%x : affiche le NDC (environnement de diagnostic imbriqué) associé au thread actuel, notamment utilisé dans les applications multi-clients et multi-thread comme les javaservlets.
%% : afficher un caractère "%" %F : afficher le nom du fichier dans lequel le message de journal est généré
%L : numéro de ligne dans le code de sortie
%m : affiche le message spécifié dans le code et les informations de journal spécifiques générées
%n : génère un caractère de retour chariot et de saut de ligne, qui est "/r/n" sur la plate-forme Windows et "/n" sur la plate-forme Unix. Lors de la sortie des informations de journal, vous pouvez ajouter des modificateurs entre % et le caractère de mode. contrôler sa largeur minimale et sa largeur maximale, ainsi que l'alignement du texte.
comme:
1)%20c : Spécifiez le nom de la catégorie de sortie. La largeur minimale est de 20. Si le nom de la catégorie est inférieur à 20, il sera aligné à droite par défaut.
2)%-20c : Spécifiez le nom de la catégorie de sortie. La largeur minimale est de 20. Si le nom de la catégorie est inférieur à 20, le signe "-" spécifie l'alignement à gauche.
3)%.30c : Spécifiez le nom de la catégorie de sortie. La largeur maximale est de 30. Si le nom de la catégorie est supérieur à 30, les caractères supplémentaires à gauche seront coupés, mais s'il est inférieur à 30, il y aura il n'y a pas d'espaces.
4)%20.30c : Si le nom de la catégorie comporte moins de 20 caractères, remplissez les espaces et justifiez-le à droite. Si le nom comporte plus de 30 caractères, tronquez les caractères du côté gauche.
Méthode de configuration de log4j.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<nom de l'appender="appender1"
>
<param name="Fichier" value="logfile08.html" />
<param name="MaxFileSize" value="1MB" />
<param name="MaxBackupIndex" value="5" />
<mise en page>
</mise en page>
</appender>
<racine>
<level value="debug" />
<appender-ref ref="appender1" />
</racine>
</log4j:configuration>
Avant d'utiliser Log4j dans le programme, importez d'abord commons-logging.jar et logging-log4j-1.2.9.jar dans le chemin de classe et placez log4j.properties dans le répertoire racine src. Pour utiliser log4j dans une classe, déclarez d'abord une variable statique Loggerlogger=Logger.getLog("classname"). Elle peut être utilisée maintenant.
L'utilisation est la suivante : logger.debug("debugmessage") ou logger.info("infomessage").
1. Obtenez l'enregistreur
En utilisant Log4j, la première étape consiste à obtenir un enregistreur, qui se chargera de contrôler les informations du journal.
Sa syntaxe est :
publicstaticLoggergetLogger (nom de chaîne)
Obtient le consignateur sous le nom spécifié et, si nécessaire, crée un nouveau consignateur pour ce nom. Name prend généralement le nom de cette classe, tel que :
staticLoggerlogger=Logger.getLogger(ServerWithLog4j.class.getName())
2. Lisez le fichier de configuration
Après avoir obtenu le logger, la deuxième étape consiste à configurer l'environnement Log4j. La syntaxe est :
BasicConfigurator.configure() : utilisez automatiquement et rapidement l'environnement Log4j par défaut.
PropertyConfigurator.configure(StringconfigFilename) : lit le fichier de configuration écrit à l'aide du fichier de propriétés Java.
DOMConfigurator.configure(Stringfilename) : lit le fichier de configuration au format XML.
3. Insérer les informations d'enregistrement (informations de journal formatées)
Lorsque les deux étapes nécessaires ci-dessus sont terminées, vous pouvez facilement utiliser des instructions de journalisation avec des priorités différentes à insérer partout où vous souhaitez vous connecter. La syntaxe est la suivante :
Logger.debug (message d'objet);
Logger.info (message d'objet);
Logger.warn(Objectmessage);
Logger.error (Objectmessage);
Démonstration du programme
1. Utilisez un programme pour afficher les informations du journal
importer java.io.IOException ;
importer org.apache.commons.logging.impl.Log4JLogger ;
importer org.apache.log4j.BasicConfigurator ;
importer org.apache.log4j.FileAppender ;
importer org.apache.log4j.Layout ;
importer org.apache.log4j.Level ;
importer org.apache.log4j.Logger ;
importer org.apache.log4j.SimpleLayout ;
/**
*
* @version : 1.1
*
* @auteur : Su Ruonian<a href="mailto:[email protected]">Envoyer un e-mail</a>
*
* @depuis : 1.0 Heure de création : 2013-1-1 03:19:42 pm
*
* @function : Afficher le journal via le code
*
*/
classe publique Log4jPrintByCode {
Enregistreur statique privé logger = Logger.getLogger(Log4jPrintByCode.class);
mise en page privée = new SimpleLayout();
FileAppender privé fileAppender ;
//Utiliser les dépendances de construction et initialiser lors de la création d'objets
public Log4jPrintByCode (mise en page, niveau de niveau, chaîne distDir) {
BasicConfigurator.configure(); //Utiliser les informations de configuration par défaut, pas besoin d'écrire log4j.properties
essayer {
init(layout,level, distDir);
} attraper (Exception e) {
e.printStackTrace();
}
}
public void init (mise en page, niveau de niveau, chaîne distDir) génère une exception {
logger.setLevel(level); //Définir le niveau de sortie du journal
fileAppender = new FileAppender(layout,distDir,false);
logger.addAppender(fileAppender); //Ajouter un terminal de sortie
}
public static void main (String[] arguments) {
Mise en page SimpleLayout = new SimpleLayout();
Chaîne logDir = "log4jcode.Log" ;
Log4jPrintByCode log4jCode = new Log4jPrintByCode(layout,Level.INFO,logDir);
//Les informations suivantes seront affichées
log4jCode.logger.info("informations du journal imprimées par log4j");
log4jCode.logger.warn("log warn print by log4j");
log4jCode.logger.error("erreur de journal imprimée par log4j");
}
mise en page publique getLayout() {
disposition de retour ;
}
public void setLayout (mise en page) {
this.layout = mise en page ;
}
public FileAppender getFileAppender() {
retourner fileAppender ;
}
public void setFileAppender (FileAppender fileAppender) {
this.fileAppender = fileAppender;
}
}
// Enregistrer les informations au niveau des informations
si (logger.isInfoEnabled()) {
logger.info("Ceci est un message d'information de Dao.");
}
2.Log4J génère les mêmes informations de journal vers plusieurs destinations
/* Changer de base de données */
utilisez db_log4j ;
/* Tableau d'informations du journal */
créer la table tb_log(
logId int non nul commentaire auto_increment 'numéro de série',
createDate varchar(45) commentaire nul par défaut 'Durée de génération du journal',
thread varchar(45) commentaire nul par défaut 'thème actuel',
level varchar(45) commentaire nul par défaut 'Niveau de journalisation actuel',
class varchar(45) commentaire nul par défaut 'Générer une classe de journal',
message varchar(245) commentaire nul par défaut « Informations spécifiques au journal »,
clé primaire (logId)
);
L'instance d'application génère simultanément des informations de journal sur la console, le fichier et la base de données.
Créer une base de données et des tables
/* Changer de base de données */
utilisez db_log4j ;
/* Tableau d'informations du journal */
créer la table tb_log(
logId int non nul commentaire auto_increment 'numéro de série',
createDate varchar(45) commentaire nul par défaut 'Durée de génération du journal',
thread varchar(45) commentaire nul par défaut 'thème actuel',
level varchar(45) commentaire nul par défaut 'Niveau de journalisation actuel',
class varchar(45) commentaire nul par défaut 'Générer une classe de journal',
message varchar(245) commentaire nul par défaut « Informations spécifiques au journal »,
clé primaire (logId)
);
#Définir la sortie A1 vers le contrôleur
log4j.appender.A1=org.apache.log4j.ConsoleAppender
#Définissez le mode de mise en page de A1 comme PaternLayout
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
# Définir le format de sortie de A1
log4j.appender.A1.layout.ConversionPattern=%4p [%t] (%F:%L) - %m%n
#Définir la sortie A2 dans un fichier
log4j.appender.A2=org.apache.log4j.RollingFileAppender
#Définissez vers quel fichier A2 sort
log4j.appender.A2.File=./log/sysLog.log
#Définir la longueur maximale du fichier de sortie A2
log4j.appender.A2.MaxFileSize = 1 Ko
#Définir le nombre de fichiers de sauvegarde pour A2
log4j.appender.A2.MaxBackupIndex = 3
#Définissez le mode de mise en page de A2 comme PatternLayout
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
#Définir le mode de sortie de A2
log4j.appender.A2.layout.ConversionPattern=%d{aaaa-MM-jj hh:mm:ss}:%p %t %c - %m%n
#Définir la sortie A3 vers la base de données
log4j.appender.A3=org.apache.log4j.jdbc.JDBCAppender
log4j.appender.A3.URL=jdbc:mysql://localhost:3306/db_log4j
log4j.appender.A3.driver=com.mysql.jdbc.Driver
log4j.appender.A3.user=root
log4j.appender.A3.password=root
#Définir la disposition de A3 et les instructions SQL exécutées
log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=INSERT INTO tb_log(createDate,thread,level,class,message) valeurs('%d','%t','%-5p','%c','%m ')
importer org.apache.log4j.Logger ;
importer org.apache.log4j.PropertyConfigurator ;
/**
*
* @version : 1.1
*
* @auteur : Su Ruonian<a href="mailto:[email protected]">Envoyer un e-mail</a>
*
* @depuis : 1.0 Heure de création : 2013-1-1 04:13:59 PM
*
* @function : contrôlez la sortie des informations du journal vers plusieurs destinations via des fichiers de configuration
*
*/
classe publique Log4jPrintByConfigure {
Enregistreur statique privé logger = Logger.getLogger(Log4jPrintByConfigure.class);
public static void main (String[] args) lève une exception {
//Charge le fichier de configuration du journal log4j.properties
PropertyConfigurator.configure("configure/log4j.properties");//Le fichier est stocké dans le dossier configure dans le même répertoire que src
//S'ils sont placés sous src, les paramètres doivent être "bin/log4j.properties" ou "src/log4j.properties". Il est recommandé d'utiliser bin comme standard.
//Les informations suivantes seront imprimées
logger.debug("logger print DEBUG message");
logger.info("logger imprime le message INFO");
logger.warn("l'enregistreur imprime le message WARN");
logger.error("message d'ERREUR d'impression de l'enregistreur");
logger.fatal("Voici le message FATAL");
}
}