Composition des composants Log4j
Log4j est composé de trois composants importants :
1. Priorité des informations du journal (Logger)
Objectif 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 sont 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 précise si le journal sera imprimé sur la console ou dans un fichier
et le format de sortie contrôle le contenu d'affichage des informations du journal.
Introduction à Log4j
Log4j est un projet open source d'Apache En utilisant Log4j, nous pouvons contrôler la destination de la transmission des informations du journal vers la console, les fichiers, les composants de l'interface graphique et même les sockets. Serveur, enregistreur d'événements NT, démon Syslog UNIX, etc. ; nous pouvons également contrôler 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 journal plus en détail. log4j-- journal pour java (java log) .
Adresse de téléchargement de Log4j : http://logging.apache.org/log4j/2.x/download.html
Fichier de configuration Log4j Le Le format de
Log4j prend en charge deux formats de fichier de configuration :
1. Le fichier au format XML
2. Le fichier au format de propriétés
peut également être utilisé complètement. fichiers de configuration à la place pour configurer l'environnement Log4j dans le code. Cependant, l'utilisation de fichiers de configuration rendra votre application plus flexible.
Fichier de configuration de définition Log4j
1. Configurer le logger racine
La syntaxe est :
Description du paramètre :log4j.rootLogger = [ level ] , appenderName, appenderName, …
niveau Est la priorité de la journalisation, 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 grave 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ée au niveau grossier, en mettant l'accent sur l'ensemble du processus d'exécution de l'application
Débogage : généralement utilisé au niveau grossier, mettant l'accent sur l'ensemble du processus d'exécution de l'application.
Tous : 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 le basculement des informations de journal vers le niveau correspondant 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 l'appender de destination de sortie des informations du journal
La syntaxe est :
Les appenders fournis par Log4j sont les suivants :log4j.appender.appenderName = fully.qualified.name.of.appender.class log4j.appender.appenderName.option1 = value1 ... log4j.appender.appenderName.option = valueN
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 à n'importe quel endroit spécifié au format de streaming)
3. Configurez le format des informations du journal
La syntaxe est :
Les mises en page fournies par Log4j sont les suivantes :log4j.appender.appenderName.layout = fully.qualified.name.of.layout.class log4j.appender.appenderName.layout.option1 = value1 … log4j.appender.appenderName.layout.option = valueN
org.apache.log4j.HTMLLayout (mise en page au format tableau HTML),
org.apache.log4j.PatternLayout (le mode de mise en page peut être spécifié de manière flexible),
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 fil de discussion, 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 :
%m affiche le message spécifié dans le code
<. 🎜>%p priorité de sortie , À savoir DEBUG, INFO, WARN, ERROR, FATAL %r Afficher le nombre de millisecondes nécessaires entre le démarrage de l'application et la sortie des informations du journal %c Le catégorie à laquelle appartient la sortie, généralement la catégorie à laquelle elle appartient Le nom complet %t Afficher le nom du thread qui a généré l'événement de journal %n Afficher un retour chariot et un saut de ligne caractère, "rn" pour la plate-forme Windows, "n" pour 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 par la suite, par exemple. : %d{aaa MMM jj HH:mm:ss,SSS} Le résultat est similaire : 2002 Octobre Mois 18 22:10:28,921 %l Affiche l'emplacement où l'événement de journal s'est produit, y compris la catégorie. nom, le thread où il s'est produit et le nombre de lignes dans le code. Exemple : Testlog4.main(TestLog4.java:10)%x : affiche le NDC (environnement de diagnostic imbriqué) associé au thread actuel, en particulier pour les applications multi-clients et multi-thread comme le milieu des servlets Java. %% : afficher un caractère "%" %F : afficher le nom du fichier dans lequel le message de journal a été généré %L : afficher le numéro de ligne dans le code %m : Afficher le message spécifié dans le code et les informations de journal spécifiques générées %n : Afficher un retour chariot et un saut de ligne, qui est "rn" sur la plate-forme Windows et "n" sur Unix Le saut de ligne dans les informations du journal de sortie peut être compris entre % et Ajouter des modificateurs entre les caractères de modèle pour contrôler leur largeur minimale, leur largeur maximale et l'alignement du texte.
如:
1)%20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,默认的情况下右对齐。
2)%-20c:指定输出category的名称,最小的宽度是20,如果category的名称小于20的话,”-”号指定左对齐。
3)%.30c:指定输出category的名称,最大的宽度是30,如果category的名称大于30的话,就会将左边多出的字符截掉,但小于30的话也不会有空格。
4)%20.30c:如果category的名称小于20就补空格,并且右对齐,如果其名称长于30字符,就从左边交远销出的字符截掉。
log4j.xml的配置方式
View Code <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <appender name="appender1" class="org.apache.log4j.RollingFileAppender"> <param name="File" value="logfile08.html" /> <param name="MaxFileSize" value="1MB" /> <param name="MaxBackupIndex" value="5" /> <layout class="org.apache.log4j.HTMLLayout"> </layout> </appender> <root> <level value="debug" /> <appender-ref ref="appender1" /> </root> </log4j:configuration>
代码中使用Log4j
在程序中使用 Log4j之前,首先要将commons-logging.jar和logging-log4j-1.2.9.jar导入到classpath中,并将 log4j.properties放于src根目录中。 在类中使用log4j,首先声明一个静态变量 Logger logger=Logger.getLog("classname").现在就可以使用了。
用法如下:logger.debug("debug message")或者logger.info("info message").
1.得到记录器
使用Log4j,第一步就是获取日志记录器,这个记录器将负责控制日志信息。
其语法为:
public static Logger getLogger( String name)
通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。Name一般取本类的名字,比如:
static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )
2.读取配置文件
当获得了日志记录器之后,第二步将配置Log4j环境,其语法为:
BasicConfigurator.configure (): 自动快速地使用缺省Log4j环境。
PropertyConfigurator.configure ( String configFilename) :读取使用Java的特性文件编写的配置文件。
DOMConfigurator.configure ( String filename ) :读取XML形式的配置文件。
3.插入记录信息(格式化日志信息)
当上两个必要步骤执行完毕,您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,语法如下:
Logger.debug ( Object message ) ;
Logger.info ( Object message ) ;
Logger.warn ( Object message ) ;
Logger.error ( Object message ) ;
程序演示
1.使用程序进行日志信息输出
package org.demo.log4j.dennisit; import java.io.IOException; import org.apache.commons.logging.impl.Log4JLogger; import org.apache.log4j.BasicConfigurator; import org.apache.log4j.FileAppender; import org.apache.log4j.Layout; import org.apache.log4j.Level; import org.apache.log4j.Logger; import org.apache.log4j.SimpleLayout; /** * * @version : 1.1 * * @author : 苏若年 <a href="mailto:DennisIT@163.com">发送邮件</a> * * @since : 1.0 创建时间: 2013-1-1 下午03:19:42 * * @function: 通过代码将日志输出 * */ public class Log4jPrintByCode { private static Logger logger = Logger.getLogger(Log4jPrintByCode.class); private Layout layout = new SimpleLayout(); private FileAppender fileAppender; //使用构造依赖,创建对象时初始化 public Log4jPrintByCode(Layout layout, Level level,String distDir){ BasicConfigurator.configure(); //使用默认的配置信息,不需要写log4j.properties try { init(layout,level, distDir); } catch (Exception e) { e.printStackTrace(); } } public void init(Layout layout, Level level,String distDir) throws Exception{ logger.setLevel(level); //设置日志输出级别 fileAppender = new FileAppender(layout,distDir,false); logger.addAppender(fileAppender); //添加输出端 } public static void main(String[] args) { SimpleLayout layout = new SimpleLayout(); String logDir = "log4jcode.Log"; Log4jPrintByCode log4jCode = new Log4jPrintByCode(layout,Level.INFO,logDir); //下面信息将被输出 log4jCode.logger.info("log info print by log4j"); log4jCode.logger.warn("log warn print by log4j"); log4jCode.logger.error("log error print by log4j"); } public Layout getLayout() { return layout; } public void setLayout(Layout layout) { this.layout = layout; } public FileAppender getFileAppender() { return fileAppender; } public void setFileAppender(FileAppender fileAppender) { this.fileAppender = fileAppender; } }
为了提高效率,我们可以在写日志前增加判断:
// 记录debug级别的信息 if (logger.isDebugEnabled()) { logger.debug("This is debug message from Dao."); } // 记录info级别的信息 if (logger.isInfoEnabled()) { logger.info("This is info message from Dao."); }
如果这个类作为基类,如J2EE中的BaseDao、BaseAction、BaseService等等,则我们可以将各层的日志信息分类输出到各个文件。
2.Log4J将同一个日志信息输出到多个目的地
/* 创建数据库 */ create database db_log4j; /* 切换数据库 */ use db_log4j; /* 日志信息表 */ create table tb_log( logId int not null auto_increment comment '流水号' , createDate varchar(45) default null comment '日志生成时间' , thread varchar(45) default null comment '当前线程', level varchar(45) default null comment '当前日志级别' , class varchar(45) default null comment '生成日志的类', message varchar(245) default null comment '日志具体信息', primary key(logId) );
应用实例将日志信息同时输出到控制台,文件和数据库中.
创建数据库与 表
/* 创建数据库 */ create database db_log4j; /* 切换数据库 */ use db_log4j; /* 日志信息表 */ create table tb_log( logId int not null auto_increment comment '流水号' , createDate varchar(45) default null comment '日志生成时间' , thread varchar(45) default null comment '当前线程', level varchar(45) default null comment '当前日志级别' , class varchar(45) default null comment '生成日志的类', message varchar(245) default null comment '日志具体信息', primary key(logId) );
配置文件log4j.properties
#定义3个输出端 log4j.rootCategory=INFO,A1,A2,A3 #定义A1输出到控制器 log4j.appender.A1=org.apache.log4j.ConsoleAppender #定义A1的布局模式为PaternLayout log4j.appender.A1.layout=org.apache.log4j.PatternLayout # 定义A1的输出格式 log4j.appender.A1.layout.ConversionPattern=%4p [%t] (%F:%L) - %m%n #定义A2输出到文件 log4j.appender.A2=org.apache.log4j.RollingFileAppender #定义A2输出到哪个文件 log4j.appender.A2.File=./log/sysLog.log #定义A2输出文件的最大长度 log4j.appender.A2.MaxFileSize = 1KB #定义A2的备份文件数 log4j.appender.A2.MaxBackupIndex = 3 #定义A2的布局模式为PatternLayout log4j.appender.A2.layout=org.apache.log4j.PatternLayout #定义A2的输出模式 log4j.appender.A2.layout.ConversionPattern=%d{yyyy-MM-dd hh:mm:ss}:%p %t %c - %m%n #定义A3输出到数据库 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 #定义A3的布局和执行的SQL语句 log4j.appender.A3.layout=org.apache.log4j.PatternLayout log4j.appender.A3.layout.ConversionPattern=INSERT INTO tb_log(createDate,thread,level,class,message) values('%d','%t','%-5p','%c','%m')
Java测试代码
package org.demo.log4j.dennisit; import org.apache.log4j.Logger; import org.apache.log4j.PropertyConfigurator; /** * * @version : 1.1 * * @author : 苏若年 <a href="mailto:DennisIT@163.com">发送邮件</a> * * @since : 1.0 创建时间: 2013-1-1 下午04:13:59 * * @function: 通过配置文件控制日志信息输出到多个目的端 * */ public class Log4jPrintByConfigure { private static Logger logger = Logger.getLogger(Log4jPrintByConfigure.class); public static void main(String[] args) throws Exception { //加载log配置文件log4j.properties PropertyConfigurator.configure("configure/log4j.properties");//文件存放在src同目录的configure文件夹下 //如果放在src下的话,参数应为"bin/log4j.properties"或者"src/log4j.properties", 建议以bin为准 //以下信息将被打印输出 logger.debug("logger print DEBUG messgae"); logger.info("logger print INFO message"); logger.warn("logger print WARN message"); logger.error("logger print ERROR message"); logger.fatal("Here is FATAL message"); } }
更多使用Log4j为项目配置日志输出应用详解以及示例演示的实现分析相关文章请关注PHP中文网!