1. Présentation
1.1 Contexte
Dans notre développement quotidien, la journalisation est très importante. De manière générale, l'ajout de la journalisation à une application a trois objectifs : surveiller les modifications des variables dans le code et les enregistrer périodiquement dans des fichiers pour une analyse statistique par d'autres applications ; suivre la trajectoire d'exécution du code comme base pour les audits futurs ; en tant que débogueur dans l'environnement de développement intégré, imprimant les informations de débogage du code dans un fichier ou une console.
1.2 Introduction
Log4j (log pour java) est un projet open source d'Apache, qui fournit une méthode délicate de gestion des logs. Grâce à un fichier de configuration, nous pouvons contrôler le format de sortie et la destination de chaque journal dans plusieurs options. En définissant le niveau d'information, nous pouvons également basculer de manière flexible les informations de retour dans le code. En termes simples, log4j est une bibliothèque API qui aide les développeurs à gérer la sortie des journaux. Sa caractéristique la plus importante est que le fichier de configuration peut définir de manière flexible la priorité des informations du journal, la destination de sortie des informations du journal et le format de sortie des informations du journal.
Configuration 2.log4j
Diagramme de classes 2.1log4j
Logger - rédacteur de journaux permettant aux programmeurs de générer des informations de journal
Appender - Destination du journal, affiche les informations de journal formatées à l'endroit spécifié
ConsoleAppender - Appender dont la destination est la console
FileAppender - Appender dont la destination est le fichier
RollingFileAppender - Appender dont la destination est un fichier de taille limitée
Layout - Formateur de journal, utilisé pour formater la demande de journalisation du programmeur en une chaîne
PatternLayout -Formater la mise en page de la demande de journalisation avec le modèle spécifié
2.2 Définir le fichier de configuration
Log4j peut être défini dynamiquement via le programme Java. L'inconvénient évident de cette méthode est : si vous devez modifier le niveau de sortie du journal et d'autres informations, vous devez le modifier. puis recompilez-le, ce qui est très gênant.
L'utilisation de fichiers de configuration rendra notre application plus flexible dans la configuration des journaux. Les méthodes de sortie des journaux incluent la priorité de sortie, la destination de sortie et le format de sortie. Log4j prend en charge deux formats de fichier de configuration, l'un est un fichier au format XML et l'autre est le fichier de propriétés Java log4j.properties (clé = valeur).
n fichier xml
n fichier de propriétés (recommandé)
2.3 Fichier de configuration log4j.properties
Lorsque Log4J est appelé pour la première fois, Log4J affichera le chemin (. ./web-inf/class/, bien sûr, il peut également être placé dans n'importe quel autre répertoire, à condition que le répertoire soit inclus dans le chemin de classe), et lire la configuration complète de ce fichier. Ce fichier de configuration indique à Log4J dans quel format, quel type d'informations et où les sortir. En conséquence, nous devons configurer trois aspects :
1. Répertoire racine (niveau et destination) ;
2. Destination (console, fichiers, etc.) ; . Style de sortie (comment afficher le contenu du journal)
L'exemple est le suivant :
#Définir le niveau de sortie du journal
log4j.rootLogger=debug ,appender1.
#Sortie vers la console
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
#Le style est TTCCLayout
log4j. appender1.layout=org.apache.log4j.TTCCLayout
2.4.log4j description à trois composantsLog4j comporte trois composants principaux : Loggers (enregistreur), Appender (source de sortie) et Layout. L'utilisation combinée de ces trois composants permet d'enregistrer facilement le type et le niveau d'informations, et de contrôler le style et l'emplacement de la sortie du journal au moment de l'exécution. Les trois composants sont expliqués ci-dessous :
2.4.1 Logger Logger
L'objet Logger est un rédacteur de journal utilisé pour remplacer System.out ou System.err pour permettre aux programmeurs de générer des informations de journal.
Configurez le Logger racine, la syntaxe est :
log4j.rootLogger = [level], appenderName, appenderName,…
Où, le niveau est la priorité de journalisation, divisée en niveaux OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL ou personnalisés. 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. Par exemple, si le niveau INFO est défini ici, toutes les informations du journal de niveau DEBUG dans l'application ne seront pas imprimées. appenderName spécifie où les informations du journal sont sorties. Plusieurs destinations de sortie peuvent être spécifiées en même temps.
2.4.2 Appender de destination de sortie
Le système de journalisation Log4j vous permet de sortir les journaux vers différents endroits, tels que la console, les fichiers, et de générer de nouveaux journaux en fonction du nombre de jours ou de la taille du fichier. . fichiers, envoyés vers d’autres endroits sous forme de flux, etc.
configurez l'appender, sa syntaxe est :
log4j.appender.appenderName = fully.qualified.name.of.appender.class log4j.appender.appenderName.option1 = value1 … log4j.appender.appenderName.option = valueN
"fully.qualified.name.of.appender.class"可以指定下面五个目的地中的一个:
1).org.apache.log4j.ConsoleAppender(控制台)
2).org.apache.log4j.FileAppender(文件)
3).org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
4).org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
5).org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
(1).ConsoleAppender选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
Target=System.err:默认情况下是:System.out,指定输出控制台
(2).FileAppender 选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意谓着所有的消息都会被立即输出。
File=mylog.log:指定消息输出到mylog.log文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
(3).DailyRollingFileAppender 选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意味着所有的消息都会被立即输出。
File=mylog.log:指定消息输出到mylog.log文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
DatePattern='.'yyyy-ww:每周滚动一次文件,即每周产生一个新的文件。当然也可以指定按月、周、天、时和分。
即对应的格式如下:
1)'.'yyyy-MM: 每月
2)'.'yyyy-ww: 每周
3)'.'yyyy-MM-dd: 每天
4)'.'yyyy-MM-dd-a: 每天两次
5)'.'yyyy-MM-dd-HH: 每小时
6)'.'yyyy-MM-dd-HH-mm: 每分钟
4.RollingFileAppender 选项
Threshold=WARN:指定日志消息的输出最低层次。
ImmediateFlush=true:默认值是true,意味着所有的消息都会被立即输出。
File=mylog.log:指定消息输出到mylog.log文件。
Append=false:默认值是true,即将消息增加到指定文件中,false指将消息覆盖指定的文件内容。
MaxFileSize=100KB: 后缀可以是KB, MB或者是 GB.在日志文件到达该大小时,将会自动滚动,即将原来的内容移到mylog.log.1文件。
MaxBackupIndex=2:指定可以产生的滚动文件的最大数。
2.4.3格式(布局)Layout
有时希望根据自己的喜好格式化自己的日志输出。Log4j可以在Appender的后面附加Layout来完成这个功能。
配置Layout,其语法表示为:
log4j.appender.appenderName.layout =fully.qualified.name.of.layout.class log4j.appender.appenderName.layout.option1 = value1 … log4j.appender.appenderName.layout.option = valueN
Layout提供了四种日志输出样式,如下所示:
(1).org.apache.log4j.HTMLLayout(以HTML表格形式布局),
(2).org.apache.log4j.PatternLayout(可以灵活地指定布局模式),
(3).org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),
(4).org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
HTMLLayout 选项
LocationInfo=true:默认值是false,输出java文件名称和行号
Title=my app file: 默认值是 Log4J Log Messages.
2.PatternLayout 选项
ConversionPattern=%m%n :指定怎样格式化指定的消息。
这里需要说明的就是日志信息格式中几个符号所代表的含义:
-x号:x信息输出时左对齐
%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL,
%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日22:10:28,921
%r: 输出自应用启动到输出该log信息耗费的毫秒数
%c: 输出日志信息所属的类目,通常就是所在类的全名
%t: 输出产生该日志事件的线程名
%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10)
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
%%: 输出一个"%"字符
%F: 输出日志消息产生时所在的文件名称
%L: 输出代码中的行号
%m: 输出代码中指定的消息,产生的日志具体信息
%n: 输出一个回车换行符
可以在%与模式字符之间加上修饰符来控制其最小宽度、最大宽度、和文本的对齐方式。如:
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字符,就从左边把多出的字符截掉。
2.5.log4j配置示例
LOG4J的配置之简单使它遍及于越来越多的应用中:Log4J配置文件实现了输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等全套功能。
log4j.rootLogger=DEBUG,CONSOLE,A1,im log4j.addivity.org.apache=true
n 应用于控制台
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.Threshold=DEBUG log4j.appender.CONSOLE.Target=System.out log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout log4j.appender.CONSOLE.layout.ConversionPattern=%d-%c-%-4r[%t]%-5p%c%x-%m%n
n 应用于文件
log4j.appender.FILE=org.apache.log4j.FileAppender log4j.appender.FILE.File=file.log log4j.appender.FILE.Append=false log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=%d - %c -%-4r [%t] %-5p %c %x - %m%n
n 应用于文件回滚
log4j.appender.ROLLING_FILE=org.apache.log4j.RollingFileAppender log4j.appender.ROLLING_FILE.Threshold=ERROR log4j.appender.ROLLING_FILE.File=rolling.log log4j.appender.ROLLING_FILE.Append=true log4j.appender.ROLLING_FILE.MaxFileSize=10KB log4j.appender.ROLLING_FILE.MaxBackupIndex=1 log4j.appender.ROLLING_FILE.layout=org.apache.log4j.PatternLayout log4j.appender.ROLLING_FILE.layout.ConversionPattern=%d - %c -%-4r [%t] %-5p %c %x - %m%n
n 应用于socket
log4j.appender.SOCKET=org.apache.log4j.RollingFileAppender log4j.appender.SOCKET.RemoteHost=localhost log4j.appender.SOCKET.Port=5001 log4j.appender.SOCKET.LocationInfo=true log4j.appender.SOCKET.layout=org.apache.log4j.PatternLayout log4j.appender.SOCET.layout.ConversionPattern=[start]%d{DATE}[DATE]%n%p[PRIORITY]%n%x[NDC]%n%t[THREAD]%n%c[CATEGORY]%n%m[MESSAGE]%n%n # Log Factor 5 Appender log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000
n 发送日志给邮件
log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender log4j.appender.MAIL.Threshold=FATAL log4j.appender.MAIL.BufferSize=10 log4j.appender.MAIL.From=web@www.wuset.com log4j.appender.MAIL.SMTPHost=www.wusetu.com log4j.appender.MAIL.Subject=Log4J Message log4j.appender.MAIL.To=web@www.wusetu.com log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout log4j.appender.MAIL.layout.ConversionPattern=%d-%c-%-4r[%t]%-5p%c%x-%m%n
n 用于数据库
log4j.appender.DATABASE=org.apache.log4j.jdbc.JDBCAppender log4j.appender.DATABASE.URL=jdbc:mysql://localhost:3306/test log4j.appender.DATABASE.driver=com.mysql.jdbc.Driver log4j.appender.DATABASE.user=root log4j.appender.DATABASE.password= log4j.appender.DATABASE.sql=INSERT INTO LOG4J (Message) VALUES ('%d - %c -%-4r [%t] %-5p %c %x - %m%n') log4j.appender.DATABASE.layout=org.apache.log4j.PatternLayout log4j.appender.DATABASE.layout.ConversionPattern=%d-%c-%-4r[%t]%-5p%c%x-%m%n log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender log4j.appender.A1.File=SampleMessages.log4j log4j.appender.A1.DatePattern=yyyyMMdd-HH'.log4j' log4j.appender.A1.layout=org.apache.log4j.xml.XMLLayout
n 自定义Appender
log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender log4j.appender.im.host = mail.cybercorlin.net log4j.appender.im.username = username log4j.appender.im.password = password log4j.appender.im.recipient = corlin@cybercorlin.net log4j.appender.im.layout=org.apache.log4j.PatternLayout log4j.appender.im.layout.ConversionPattern =[framework] %d - %c -%-4r [%t] %-5p %c %x - %m%n
3.在WEB应用中为SPRING配置Log4j
首先需要在web.xml文件中加入下面的配置语句:
<!-- 为避免项目间冲突,定义唯一的 webAppRootKey--> <context-param> <param-name>webAppRootKey</param-name> <param-value>myProject.root</param-value> </context-param> <!-- 加载log4j的配置文件log4j.properties --> <context-param> <param-name>log4jConfigLocation</param-name> <param-value>/WEB-INF/classes/config/log4j/log4j.properties</param-value> </context-param> <!-- 设定刷新日志配置文件的时间间隔,这里设置为60s --> <context-param> <param-name>log4jRefreshInterval</param-name> <param-value>60000</param-value> </context-param> <!-- 加载Spring框架中的log4j监听器Log4jConfigListener --> <listener> <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class> </listener>
属性log4jConfigLocation的值建议还是设置为:/WEB-INF/classes/log4j.properties,这样我们在不启动web应用的时候,做一些测试就能够正确地记录日志信息。Log4jConfigListener是spring提供的工具类,它开启一个log4j的监视线程,并每60(log4jRefreshInterval变量定义)秒检测日志配置变化,从而不需要每次重新启动web服务来应用新的配置。在tomcat中没有根据web应用来分开系统属性。所以必须为每一个web应用定义唯一的"webAppRootKey",我们取名为webApp.root.在启动环境后,Log4jConfigListener会将值注入到webApp.root变量。
4.在代码中使用Log4j
4.1.得到记录器
使用Log4j,第一步就是要获取日志记录器,这个记录器将负责控制日志信息。
public static Logger getLogger( String name)
通过指定的名字获得记录器,如果必要的话,则为这个名字创建一个新的记录器。name一般取本类的名字,比如:
static Logger logger = Logger.getLogger ( ServerWithLog4j.class.getName () )
4.2.读取配置文件
当获得了日志记录器之后,第二步将配置Log4j环境,其语法为:
若将log4j.properties放在工程根目录下也可不写此句,程序会自动找到配置文件。
BasicConfigurator.configure (): 自动快速地使用缺省Log4j环境。PropertyConfigurator.configure ( String configFilename) :读取使用Java的特性文件编写的配置文件。
DOMConfigurator.configure ( String filename ):读取XML形式的配置文件。
log4j使用以上3种配置器来初始化,使用PropertyConfigurator适用于所有的系统。如下的语句。
PropertyConfigurator.configure("log4j.properties");
对于一般的java project可以不使用上面的语句初始化log4j,log4j会自动在classpath下,找到配置文件并初始化。如果log4j不能自动初始化配置文件,那么就需要用上面的方法进行初始化。
注意:初始化配置文件,最好只在系统启动的时候执行一次,如果执行多次,一是浪费资源,二就是对于老版本的log4j,使用DailyRollingFileAppender时,可能会出现问题。
4.3.插入记录信息(格式化日志信息)
当上两个必要步骤执行完毕,您就可以轻松地使用不同优先级别的日志记录语句插入到您想记录日志的任何地方,其语法如下:
Logger.debug ( Object message ) ;
更多Tutoriel dutilisation de base du logiciel de journalisation Java Log4j相关文章请关注PHP中文网!