SpringBoot2 集成log4j2日志框架的实现

前言

Log4j2是 Log4j 的进化版本,并提供了许多 Logback 可用的改进,同时解决了 Logback 体系结构中的一些固有问题。而且日志处理中我们会用到kafka作为日志管道。而kafka客户端依赖与Logback的兼容不是很完美,你可以选择排除依赖冲突或者使用Log4j2 。
<!-- more -->

排除Logback依赖

Spring Boot 2.x默认使用Logback日志框架,要使用 Log4j2必须先排除 Logback。

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter</artifactId>
 <exclusions>
   <!--排除logback-->
  <exclusion>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-logging</artifactId>
  </exclusion>
 </exclusions>
</dependency>

引入Log4j2依赖

<!--log4j2 依赖-->
<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

上面的 log4j2 已经适配了slf4j日志门面,所以我们的代码无需替换,只需要替换具体的日志框架以及对应的配置文件。

配置Log4j2

创建log4j2.xml文件,放在工程resources目录里。这样就可以不加任何配置。如果你需要指定配置文件需要在Spring boot 配置文件application.yml中指定 logging.config 属性。下面是一份比较详细的 log4j2 配置文件 :

 <?xml version="1.0" encoding="UTF-8"?>
 <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
 <!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
 <!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
 <configuration status="WARN" monitorInterval="30">
  <!--先定义所有的appender-->
  <appenders>
  <!--这个输出控制台的配置-->
   <console name="Console" target="SYSTEM_OUT">
   <!--输出日志的格式-->
    <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
   </console>
  <!--文件会打印出所有信息,这个log每次运行程序会自动清空,由append属性决定,这个也挺有用的,适合临时测试用-->
  <File name="log" fileName="log/test.log" append="false">
   <PatternLayout pattern="%d{HH:mm:ss.SSS} %-5level %class{36} %L %M - %msg%xEx%n"/>
  </File>
  <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
   <RollingFile name="RollingFileInfo" fileName="${sys:user.home}/logs/info.log"
      filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log">
    <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
    <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
    <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
    <Policies>
     <TimeBasedTriggeringPolicy/>
     <SizeBasedTriggeringPolicy size="100 MB"/>
    </Policies>
   </RollingFile>
   <RollingFile name="RollingFileWarn" fileName="${sys:user.home}/logs/warn.log"
      filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log">
    <ThresholdFilter level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
    <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
    <Policies>
     <TimeBasedTriggeringPolicy/>
     <SizeBasedTriggeringPolicy size="100 MB"/>
    </Policies>
   <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
    <DefaultRolloverStrategy max="20"/>
   </RollingFile>
   <RollingFile name="RollingFileError" fileName="${sys:user.home}/logs/error.log"
      filePattern="${sys:user.home}/logs/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log">
    <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
    <PatternLayout pattern="[%d{HH:mm:ss:SSS}] [%p] - %l - %m%n"/>
    <Policies>
     <TimeBasedTriggeringPolicy/>
     <SizeBasedTriggeringPolicy size="100 MB"/>
    </Policies>
   </RollingFile>
  </appenders>
  <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
  <loggers>
   <!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
   <logger name="org.springframework" level="INFO"/>
   <logger name="org.mybatis" level="INFO"/>
   <root level="all">
    <appender-ref ref="Console"/>
    <appender-ref ref="RollingFileInfo"/>
    <appender-ref ref="RollingFileWarn"/>
    <appender-ref ref="RollingFileError"/>
   </root>
  </loggers>
 </configuration>

基本上你拿上面的配置根据你自己的需要更改一下即可生效。 windows 下 ${sys:user.home} 会将日志打印到用户目录下

调用Logger输出日志

下面的示例代码使用了神器lombok中的@Slf4j 注解可以很方便的使用 org.slf4j.Logger 对象。日常开发尽量使用Slf4j门面来处理日志,尽量避免使用具体的日志框架。

package cn.felord.spring.security;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.time.LocalDate;
import java.util.Properties;

/**
 * @author dax
 * @since 2019/10/9 0:03
 */
@Slf4j
@RestController
@RequestMapping("/logging")
public class LogController {

 @GetMapping("/do")
 public String log() {

  log.info("log4j2 test date: {} info: {}", LocalDate.now(), "请关注公众号:Felordcn");

  return "log4j2";
 }

}

控制台输出 :[00:14:48:161] [INFO] - cn.felord.spring.security.LogController.log(LogController.java:23) - log4j2 test date: 2019-10-09 info: 请关注公众号:Felordcn 并存档。

总结

今天我们将Spring Boot 2.x 的日志框架由默认的Logback 替换为 log4j2 并着重的提及了一些实战中使用的要点。相信你很快能够掌握这一技巧。日志作为应用运行情况,业务执行情况的重要依据,是开发排错,业务追溯的重要保障。希望各位能够重视起来。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

作者:码农小胖哥

来源:https://segmentfault.com/a/1190000020618973

(0)

相关推荐

  • Springboot整合log4j2日志全解总结

    在项目推进中,如果说第一件事是搭Spring框架的话,那么第二件事情就是在Sring基础上搭建日志框架,我想很多人都知道日志对于一个项目的重要性,尤其是线上Web项目,因为日志可能是我们了解应用如何执行的唯一方式. 在18年大环境下,更多的企业使用Springboot和Springcloud来搭建他们的企业微服务项目 ,此篇文章是博主在实践中用Springboot整合log4j2日志的总结. 常用日志框架 java.util.logging:是JDK在1.4版本中引入的Java原生日志框架 Lo

  • spring boot自定义log4j2日志文件的实例讲解

    背景:因为从 spring boot 1.4开始的版本就要用log4j2 了,支持的格式有json和xml两种格式,此次实践主要使用的是xml的格式定义日志说明. spring boot 1.5.8.RELEASE 引入log4j2的开发步骤如下: 1.首先把spring-boot-starter-web以及spring-boot-starter包下面的spring-boot-starter-logging排除,然后引入spring-boot-starter-log4j2包. <dependen

  • 在Spring Boot中如何使用log4j记录日志

    前言 Spring Boot在所有内部日志中使用Commons Logging,但是默认配置也提供了对常用日志的支持,如:Java Util Logging,Log4J, Log4J2和Logback.每种Logger都可以通过配置使用控制台或者文件输出日志内容.本文主要介绍了在Spring Boot中如何使用log4j记录日志,感兴趣的来一起学习学习. 引入log4j依赖 在创建Spring Boot工程时,我们引入了spring-boot-starter,其中包含了spring-boot-s

  • SpringBoot2 集成log4j2日志框架的实现

    前言 Log4j2是 Log4j 的进化版本,并提供了许多 Logback 可用的改进,同时解决了 Logback 体系结构中的一些固有问题.而且日志处理中我们会用到kafka作为日志管道.而kafka客户端依赖与Logback的兼容不是很完美,你可以选择排除依赖冲突或者使用Log4j2 . <!-- more --> 排除Logback依赖 Spring Boot 2.x默认使用Logback日志框架,要使用 Log4j2必须先排除 Logback. <dependency> &

  • springboot log4j2日志框架整合与使用过程解析

    目录 一.引入maven依赖 二.添加配置文件log4j2-spring.xml 三.自定义配置文件 四.测试一下 一.引入maven依赖 Spring Boot默认使用LogBack,但是我们没有看到显示依赖的jar包,其实是因为所在的jar包spring-boot-starter-logging都是作为spring-boot-starter-web或者spring-boot-starter依赖的一部分.如果这里要使用Log4j2,需要从spring-boot-starter-web中去掉sp

  • Spring 5.0集成log4j2日志管理的示例代码

    在使用Spring框架的时候,我们可以很方便的配置log4j来进行日志管理. Spring 5.0发布一段时间了,最近将项目从Spring 4.3升级到Spring 5.0,Spring 4.3集成log4j所用的类org.springframework.web.util.Log4jConfigListener在Spring 5.0版本已经删除,而且log4j 1.x版已经不再更新.我们将log4j-1.x升级为log4j-2.x 先引入log4j 2的三个jar包 log4j-api-2.10

  • Logback与Log4j2日志框架性能对比与调优方式

    目录 前言 性能测试 logback 同步日志 异步日志(队列扩容) 异步日志(半队列扩容) log4j2 同步日志 异步日志(队列扩容) 异步日志(日志淘汰策略) 异步日志(半队列扩容) 异步日志(等待策略) 性能调优 异步日志 日志可靠性 Logback Log4j2 日志抛弃策略 Log4j2 Logback 日志等待策略 TimeoutWaitStrategy YieldWaitStrategy 队列容量 Logback Log4j2 长度计算公式 消费瓶颈 消费TPS 请求TPS 消费

  • Spring5新功能日志框架Log4j2整合示例

    目录 Spring5整合Log4j2日志框架 一.引入依赖 二.创建Log4j2 配置文件 三.手动进行单独的输出 Spring5整合Log4j2日志框架 本次系列的学习是基于 spring5 ,也就是最新的版本. spring5 的整个代码都是基于 java8 的,自身作了不少的优化,比如许多不建议使用的类和方法已经在代码库中删除. 此外,spring5 框架自带了通用的日志封装,但是我们依然可以整合其他的日志框架使用,比如 Log4j.不过在 spring5 中移除了 Log4jConfig

  • 浅谈Spring Boot日志框架实践

    Java应用中,日志一般分为以下5个级别: ERROR 错误信息 WARN 警告信息 INFO 一般信息 DEBUG 调试信息 TRACE 跟踪信息 Spring Boot使用Apache的Commons Logging作为内部的日志框架,其仅仅是一个日志接口,在实际应用中需要为该接口来指定相应的日志实现. SpringBt默认的日志实现是Java Util Logging,是JDK自带的日志包,此外SpringBt当然也支持Log4J.Logback这类很流行的日志实现. 统一将上面这些 日志

  • 解决springboot 2.x集成log4j2调试日志无法关闭的问题

    springboot2.x集成log4j2时,始终无法关闭log4j2自身的日志输出 已经做了如下配置: 在log4j2.xml的配置文件中,配置configuration的status属性为OFF: 确认系统所有地方无配置log4j2.debug: 如上配置都无法解决问题,只能从源码着手一探究竟. 从log4j2-api包中,找到StatusLogger,其设置日志输出level的代码如下: private StatusLogger(final String name,final Messag

  • 详解Springboot2.3集成Spring security 框架(原生集成)

    0.pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0

  • Nlog日志框架集成Seq扩展包

    什么是Seq? 正如我们使用不同的日志框架来为我们的应用程序收集各类日志信息, 这些信息可以有效的帮助我们快速诊断应用程序中发生的各类问题, 尽管如此,对于常见的日志框架而言, 它们往往只是解决了日志功能快速集成以及如何配置输出保存等功能. 对于那些不间断运行的应用程序而言, 日志的存储和维护工作会变得异常麻烦, 如果想灵活的在不同时间段去查找日志, 根据不同的日志类型快速的定位问题, 这会变得非常困难,所以为了解决这些问题, Seq就登场了.Seq提供了收集应用程序日志.搜索过滤.警告以及图表

  • Springboot2 配置AOP日志的方法步骤

    Spring boot2 配置AOP前置增强,后置增强,异常增强,环绕增强,最终增强 关于AOP切面相关具体概念不做过多阐述(概念弄懂有利于理解思想),这是配置AOP的各种增强日志,解决日志嵌套在业务代码的麻烦和不科学 先来个Git demo项目压压惊: https://github.com/zhang-xiao-xiang/boot-aop  (有的更新了一些) 1pom依赖(这里使用log4j2作为日志框架,因为比log4j或者其他日志框架,它效率更高,功能更加强大) <!-- 引入log4

随机推荐