Log4j快速入门

Log4j快速入门

参考资料

前言

概述

配置

log4j.properties配置

logger配置

Appender和Layout配置

实现

总结


参考资料

官方文档:https://logging.apache.org/log4j/2.x/

组件模块:https://blog.csdn.net/Evankaka/article/details/45815047

layout模块:https://blog.csdn.net/zengxiaosen/article/details/55804423

前言

        因为在学校的学习中,很少有接触到日志相关的内容,因此可以说是一个小白。当年刚参加工作时,我作为小白碰到一个基本上完全陌生的事物log4j,又没有师傅领路,可谓吃尽苦头。幸好网上关于log4j的文档也很多,当时的我也是翻阅了大量的文档,才得以初步学会使用。写这篇文章的契机是给一个同事讨论需求时涉及到了log4j的相关内容,发现他完全没有接触过,然后讨论就变成了单方面培训(心里苦啊)。为了避免这种重复劳动,我查阅了很多log4j的相关文档,并对他们进行了汇总和整理,特整理出一篇简单的log4j入门文档,供后来者阅读和学习,本文是基于log4j-1.2.17进行编写,需要有一定的java和maven基础,只是针对log4j如何使用进行讲解,方便阅读者快速入门,使用log4j,不涉及深层内容。

概述

        在代码里使用log是一种低成本的方法去debug它,经常被使用在多线程应用和高并发应用。使用log有很多优点,它可以提供一个在运行应用的准确上下文信息;日志的输出不需要人工干预;日志可以存储在持久化媒介中。

        日志也有其缺点,它会使应用变慢。log4j对次也进行了优化,提升了性能。

配置

        log4j有三大组件:分别为Logger、Appender、Layout,都通过log4j.properties进行配置。

        Logger为日志记录器,指定输出日志的级别和输出的目的地即Appender。

        Appender为日志附着器,用来指定日志的输出目标,例如输出到控制台、文件或者自定义组件如kafka消息队列等。

        Layout定义日志输出内容格式,结合Appender使用。

log4j.properties配置

log4j.rootLogger=DEBUG,console
log4j.logger.org=ERROR
log4j.logger.org.springframework=INFO,myLogFile
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d [%t] [%p] - %m%n
log4j.appender.myLogFile=org.apache.log4j.FileAppender
log4j.appender.myLogFile.file=c:/test-log.log
log4j.appender.myLogFile.layout=org.apache.log4j.PatternLayout
log4j.appender.myLogFile.layout.conversionPattern=%d [%c]-[%-5p]%m%n

        Logger配置中,rootLogger是所有logger的父节点,对于一般的logger而言,如上文的log4j.logger.org.springframework,org.springframework即为该logger的名字,INFO为输出级别,该logger只会输出INFO级别以上(包括INFO)的日志到后面的myLogFile appender中。

logger配置

#根logger配置
log4j.rootLogger=[level],appenderName1,appenderName2,...
#普通logger配置
log4j.logger.loggerName=[level],appenderName3,appenderName4,...

        level为日志级别,除了自定义的日志级别,一般的日志级别从高到低为OFF,FATAL,ERROR,WARN,INFO,DEBUG,ALL。一般日常中我们通常指用只用四个级别ERROR,WARN,INFO,DEBUG。level配置用于过滤日志输出,例如当配置的level为INFO时,在程序中使用Logger.debug("some message"),日志信息不会被打印出来,通过配置log4j.properties即可控制日志输出级别,debug通常用于测试环境,对业务进行调试。而生产环境中不需要那么多DEBUG信息,通常将日志级别设为INFO。

        appenderName*为日志输出目的地,如上面log4j.properties中配置的console和myLogFile。

Appender和Layout配置

        Appender配置日志输出的目的地,因为Layout是定义日志输出格式的,需要结合Appender使用,所以这里两者结合起来一起介绍,其配置语法如下:

#配置appender使用类
log4j.appender.appenderName=appender.class
log4j.appender.appenderName.option1=value1
...
log4j.appender.appenderName.optionN=valueN
#配置appender的layout,appender通过使用option配置使用layout
log4j.appender.appenderName.layout = layout.class
log4j.appender.appenderName.layout.option1=value1
…
log4j.appender.appenderName.layout.optionN=valueN

        Log4j已经提供了一些常用的appender类和layout类,如果已有的类无法满足,Log4j中appender.class和layout.class也可以自定义,因为是本文为Log4j入门使用教程,就不再详细深入了。

        Log4j常用的自带appender使用类如下:

org.apache.log4j.ConsoleAppender(控制台)
org.apache.log4j.FileAppender(文件)
org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

        Log4j常用的自带layout类模板如下:

org.apache.log4j.HTMLLayout(以HTML表格形式布局)
org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

        Layout一般都需要有一个option参数conversionPattern来指定日志输出格式,例如本章节一开始的log4j.properties,我们可以看到该参数的value是由一串标识符组成的,我们通过这串标识符来控制日志的输出,常用的标识符如下:

-X: X信息输出时左对齐 
%p: 输出日志信息优先级,即DEBUG,INFO,WARN,ERROR,FATAL, 
%d: 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy-MM-dd HH:mm:ss,SSS},输出类似:2011-10-18 22:10:28,921 
%r: 输出自应用启动到输出该log信息耗费的毫秒数 
%c: 输出日志信息所属的类目,通常就是所在类的全名 
%t: 输出产生该日志事件的线程名 
%l: 输出日志事件的发生位置,相当于%C.%M(%F:%L)的组合,包括类目名、发生的线程,以及在代码中的行数。 
%x: 输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。 
%%: 输出一个"%"字符 
%F: 输出日志消息产生时所在的文件名称 
%L: 输出代码中的行号 
%m: 输出代码中指定的消息,产生的日志具体信息 
%n: 输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"输出日志信息换行 

实现

        配置讲解完,log4j的入门就已经完成了大半了,接下来,简单就log4j使用进行介绍。

        第一步,通过maven引入依赖,或者直接将jar包添加至lib下。

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j<artifactId>
    <version>1.2.17</version>
</dependency>

        第二步,添加log4j.properties配置文件到classpath下。

log4j.rootLogger=DEBUG,console

log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d [%t] [%p] - %m%n

        第三步,在程序中使用log4j进行日志输出,这里使用测试类Test进行测试,具体使用如下:

import org.apache.log4j.Logger;

public class Test {
    private static Logger logger = Logger.getLogger(Test.class);
    public static void main(String[] args) {
        logger.debug("DEBUG ...");
        logger.info("INFO ...");
        logger.error("ERROR ...");
    }
}

        观察控制台即可得到输出信息:

2019-12-25 21:47:13,332 [main] [DEBUG] - DEBUG ...
2019-12-25 21:47:13,333 [main] [INFO] - INFO ...
2019-12-25 21:47:13,333 [main] [ERROR] - ERROR ...

总结

        本文仅仅是对log4j的一个初步入门,应付一些日常工作应该还是可以的,但如果要做到精通,本文是远远不够的。可以通过结合官方文档、源码、网上文档的方式,进行更加深入的学习,这就要靠各位自己了。我对log4j的掌握程度也就停留在本文的阶段,如果将来有机会深入学习的话,可能还有续集,嘿嘿。

发布了5 篇原创文章 · 获赞 3 · 访问量 993

猜你喜欢

转载自blog.csdn.net/z1616595/article/details/103706355