java log4j记录_跟光磊学Java开发-JavaCore集成Log4j2

Log4J2简介

日志就是记录程序运行的系统信息和业务信息。当系统出现线上故障时通常会通过ELK查询日志定位问题。

Log4j2是Apache提供的日志框架,可以通过API和配置文件的方式来控制项目运行时日志的输出。
同学们可以官网了解更多的内容

d4ead4b93f14980a182fe262911c6b9f.png

JavaCore集成Log4j2

在使用之前需要集成到java-core项目中,也就是将log4j2的maven依赖配置到java-core的pom.xml文件中。

  1. 在java-core项目的pom.xml文件中的properties节点中定义log4j2的版本信息
        2.14.0
  1. 在java-core项目的pom.xml文件中的dependencyManagement节点的子节点dependencies下定义log4j2的默认依赖信息
              org.apache.logging.log4j                log4j-core                ${log4j2.version}
  1. 在java-core项目的pom.xml文件中的dependencies节点中定义log4j2的依赖信息
         org.apache.logging.log4j            log4j-core        
  1. 在IDEA中的maven菜单中重新刷新所有的maven项目
    此时IDEA会自动去中央仓库下载Log4j2的jar包到本地仓库

此时java-core就集成了log4j2,并且子模块中也会集成log4j2

878fb7ab75e1464527ef1c67f4067713.png

Log4j2在java-core项目中的使用

在将log4j2集成到java-core项目后,就可以用来记录程序的日志信息。

log4j2的使用非常简单,只需要在使用类中创建一个org.apache.logging.log4j.Logger对象,然后在方法中调用该对象提供的方法即可。

package net.ittimeline.java.core.jdk.oop.lo4j2;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;/** * log4j2测试用例 * * @author tony 18601767221@163.com * @version 2020/12/15 16:32 * @since JDK11 */public class Log4j2Test {  private static final Logger LOGGER = LogManager.getLogger(Log4j2Test.class);  public static void main(String[] args) {      LOGGER.error("我是error信息");  }}

程序运行结果

2b65b63c2f487ef2ffd1e42b1ab861fa.png

当程序运行时Log4j2会读取默认的配置文件,该文件的作用是默认情况下Log4j2只会按照指定的格式将error级别的日志输出到控制台中。

<?xml version="1.0" encoding="UTF-8"?> 

Log4j2中的日志级别按照从高到低的优先级排序一共有八个:OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL

  • All:最低等级的,用于打开所有日志记录.
  • Trace:是追踪,就是程序推进以下,你就可以写个trace输出,所以trace应该会特别多,不过没关系,我们可以设置最低日志级别不让他输出.
  • Debug:指出细粒度信息事件对调试应用程序是非常有帮助的.
  • Info:消息在粗粒度级别上突出强调应用程序的运行过程.
  • Warn:输出警告及warn以下级别的日志.
  • Error:输出错误信息日志.
  • Fatal:输出每个严重的错误事件将会导致应用程序的退出的日志.
  • OFF:最高等级的,用于关闭所有日志记录.

org.apache.logging.log4j.Logger类针对8个日志级别封装了8个方法以及其他重载的方法

fca6ab4bebaa64acaafdfdda0ca53da6.png


程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。日常项目开发中日志不是打印越多越好,它的作用本身就是为了帮我们更加精准的定位问题,因为日志打印和程序一样也会占据磁盘IO,网络,CPU,内存等硬件资源。通常线上环境常用Info打印系统业务日志,Error打印系统异常日志。本地环境和测试环境可以打印Debug日志。

一般开发项目时都会自己去定义一个log4j2.xml文件去覆盖默认的配置,log4j2.xml文件必须放在src/main/resouce目录下

da01afffe5c811dd34f4a4f89a83775f.png

我这里准备了一个log4j2.xml文件,该文件只能用于控制台输出。并且每个节点的配置都已经给出了详细的注释说明。

<?xml version="1.0" encoding="UTF-8"  ?>

然后在测试类中调用 org.apache.logging.log4j.Logger对象的其他记录日志的方法

package net.ittimeline.java.core.jdk.oop.lo4j2;import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;/** * log4j2测试用例 * * @author tony 18601767221@163.com * @version 2020/12/15 16:32 * @since JDK11 */public class Log4j2Test {  private static final Logger LOGGER = LogManager.getLogger(Log4j2Test.class);  public static void main(String[] args) {      LOGGER.debug("我是debug信息");      LOGGER.info("我是info信息");      LOGGER.warn("我是warn信息");      LOGGER.error("我是error信息");  }}

程序运行效果
对比默认的日志输出格式,这个格式展示的日志信息更加全面完整。更方便定位问题。

a23dd6623a472b0e605f3650cf7101fc.png

在进行项目开发时不会使用System.out.println()打印输出语句,而使用org.apache.logging.log4j.Logger对象的方法替代。
不过日志不仅仅是输出在控制台,在公司使用SpringBoot开发应用时,用户通过java应用程序的Slf4j写入日志,SpringBoot默认使用的是logback。我们通过实现自定义的Appender将日志写入Kafka,同时Logstash通过input插件操作Kafka订阅其对应的主题。当有日志输出后被Kafka的客户端Logstash所收集,经过相关过滤操作后将日志写入Elasticsearch,此时用户可以通过Kibana获取Elasticsearch中的日志信息。

Log4j2与Lombok集成

bb2fda2ce458d3ba19650e5cb031efd9.png

Lombok官网


Lombok提供了一些注解用于生成常用的方法,在编译时将带有Lombok注解的Java文件正确编译成完整的class文件。
目前IDEA2020.3商业版中已经将Lombok作为自带插件集成,如果在IDEA2020.3以后的版本无序额外安装插件就可以使用。

2078e7cce8f1af7c53aa31a66a252db3.png

但是要使用Lombok提供的一些注解,还需要引用Lombok的Maven依赖

  1. 在java-core项目的pom.xml文件的properties中定义lombok的版本信息
        1.18.16
  1. 在java-core项目的pom.xml文件的dependencyManagement节点的dependencies子节点下配置lombok的默认依赖配置,scope属性值是provided表示Lombok作用在编译时。
              org.projectlombok                lombok                ${lombok.version}provided
  1. 在java-core项目的pom.xml文件的dependencies节点下配置Lombok的依赖
           org.projectlombok            lombok        
  1. 重新加载maven项目
    重新加载maven项目后IDEA会自动去下载Lombok的jar包到本地仓库
    然后就可以在项目中使用,不过我这里只会演示Log4j2的用法,其他的用法后续会介绍到。

之前在使用Log4j2记录日志前首先要创建org.apache.logging.log4j.Logger对象,然后调用该对象的方法来记录日志,有了Lombok后就不需要再创建org.apache.logging.log4j.Logger对象,只需要在类上加一个@Log4j2的注解,然后使用log调用org.apache.logging.log4j.Logger对象的方法即可。

IDEA中会提示log等价于之前手动创建的org.apache.logging.log4j.Logger对象

2ca0f9e6cb10e8c5f9159bb5188e601f.png
package net.ittimeline.java.core.jdk.oop.lo4j2;import lombok.extern.log4j.Log4j2;/** * log4j2测试用例 * * @author tony 18601767221@163.com * @version 2020/12/15 16:32 * @since JDK11 */@Log4j2public class Log4j2Test {  public static void main(String[] args) {      log.debug("我是debug信息");      log.info("我是info信息");      log.warn("我是warn信息");      log.error("我是error信息");  }}

程序运行结果

06ce6924ed947ad27ff4c54613d8b9bf.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值