Java 中比较常用的日志工具类,有 Log4j、SLF4j、Commons-logging(简称jcl)、Logback、Log4j2(Log4j 升级版)、Jdk Logging。

Spring Boot 默认使用 Logback,但相比较而言,Log4j2 在性能上面会更好。

Spring Boot(版本1.5.10.RELEASE)中使用 Log4j2 非常简单,添加如下依赖:

<!-- Exclude Spring Boot's Default Logging -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency> <!-- Add Log4j2 Dependency -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency> <!-- Needed for Async Logging with Log4j 2 -->
<dependency>
<groupId>com.lmax</groupId>
<artifactId>disruptor</artifactId>
<version>3.3.6</version>
</dependency> <!-- 使用jsonLayout必须依赖jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.7.4</version>
</dependency>

然后在src/main/resources中添加log4j2.xml配置文件(Spring Boot 还会识别log4j2.jsonlog4j2.yaml):

<?xml version="1.0" encoding="UTF-8"?>
<!-- status表示log4j2本身的日志信息打印级别,和下面的level,不是一个概念 -->
<!--TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF-->
<Configuration status="OFF" monitorInterval="30">
<Properties>
<Property name="LOG_PATTERN">
%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${hostName} --- [%15.15t] %-40.40c{1.} : %m%n%ex
</Property>
<Property name="LOG_FILE_PATH">/var/log/spring-boot-log4j2</Property>
</Properties>
<Appenders>
<Console name="ConsoleAppender" target="SYSTEM_OUT" follow="true">
<PatternLayout pattern="${LOG_PATTERN}"/>
</Console>
<!-- Rolling File Appender -->
<RollingFile name="FileAppender" fileName="${LOG_FILE_PATH}/spring-boot-log4j2-demo.log"
filePattern="${LOG_FILE_PATH}/spring-boot-log4j2-demo-%d{yyyy-MM-dd}-%i.log">
<PatternLayout>
<Pattern>${LOG_PATTERN}</Pattern>
</PatternLayout>
<!--<JsonLayout complete="false" compact="true">
<KeyValuePair key="timestamp" value="$${date:yyyy-MM-dd'T'HH:mm:ss.SSSZ}" />
</JsonLayout>-->
<Filters>
<!-- 只记录ERROR级别日志信息,程序打印的其他信息不会被记录 -->
<!-- 此level设置的日志级别,是过滤日志文件中打印出的日志信息,和Root的level有所区别 -->
<ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY" />
</Filters>
<Policies>
<SizeBasedTriggeringPolicy size="10MB" />
<!-- 每天创建一个日志文件 -->
<TimeBasedTriggeringPolicy interval="1" />
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<!-- 用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。 -->
<!--<Logger name="com.easyjijin.demo.springbootlog4j2" level="debug" additivity="false">
<AppenderRef ref="ConsoleAppender" />
<AppenderRef ref="FileAppender"/>
</Logger>--> <!-- AsyncRoot - 异步记录日志 - 需要LMAXDisruptor的支持 -->
<!-- <AsyncRootlevel="info" additivity="false">
<AppenderRef ref="Console"/>
<AppenderRef ref="FileAppender"/>
</AsyncRoot> --> <!-- All < Trace < Debug < Info < Warn < Error < Fatal < OFF. -->
     <!-- 程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。-->
<!-- 此level设置的日志级别,是过滤项目中输出的日志信息,和ThresholdFilter的level有所区别 -->
<Root level="ERROR">
<AppenderRef ref="ConsoleAppender" />
<AppenderRef ref="FileAppender"/>
</Root>
</Loggers>
</Configuration>

这边需要注意几个日志的级别:

  • Configuration status="OFF":这个status配置的是,Log4j2 组件本身日志级别,指的是如果 Log4j2 本身出错,打印出的日志级别配置。
  • Root level="ERROR":这个level配置的是,程序输入的日志级别,对应log.error("this is a error"),程序会打印高于或等于所设置级别的日志。
  • ThresholdFilter level="ERROR":这个level配置的是,输出到日志文件(或是其他)的日志日志级别,也就是在日志文件只输出ERROR级别的日志,其他无关信息不输出。

在程序中使用 Log4j2 打印日志信息:

@SpringBootApplication
public class Log4j2DemoApplication implements ApplicationRunner {
private static final Logger logger = LogManager.getLogger(Log4j2DemoApplication.class); public static void main(String[] args) {
SpringApplication.run(Log4j2DemoApplication.class, args);
} @Override
public void run(ApplicationArguments applicationArguments) throws Exception {
logger.debug("Debugging log");
logger.info("Info log");
logger.warn("Hey, This is a warning!");
logger.error("Oops! We have an Error. OK");
logger.fatal("Damn! Fatal error. Please fix me.");
}
}

或者使用Lombok,可以更方便的使用 Log4j2,需要添加依赖:

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>

使用代码:

import lombok.extern.log4j.Log4j2;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; @Log4j2
@RestController
public class HelloController { @RequestMapping("/home")
public String home() { log.error("Hi ! We have an Error. Hello World"); return "Hello World ----spring-boot-log4j2";
}
}

注意:如果 IDEA 报错(找不到log),IDEA 设置中添加 Lombok 插件,即可。

参考资料:

Spring Boot 使用 Log4j2的更多相关文章

  1. spring boot自定义log4j2日志文件

    背景:因为从 spring boot 1.4开始的版本就要用log4j2 了,支持的格式有json和xml两种格式,此次实践主要使用的是xml的格式定义日志说明. spring boot 1.5.8. ...

  2. spring boot使用log4j2将日志写入mysql数据库

    log4j2官方例子在spring boot中报错而且还是用的是org.apache.commons.dbcp包 我给改了一下使用org.apache.commons.dbcp2包 1.log4j2. ...

  3. Spring Boot 使用 Log4j2 & Logback 输出日志到 EKL

    文章目录 1.ELK 介绍 2.环境.软件准备 3.ELK 环境搭建 4.Spring Boot 配置示例 4.1.Log4j2 方式配置 4.2.Logback 方式配置 1.ELK 介绍 ELK ...

  4. spring boot:使用log4j2做异步日志打印(spring boot 2.3.1)

    一,为什么要使用log4j2?     log4j2是log4j的升级版,     升级后更有优势:     性能更强/吞吐量大/支持异步     功能扩展/支持插件/支持自定义级别等     这些优 ...

  5. spring boot整合log4j2

    POM配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http: ...

  6. Spring boot 配置 log4j2.xml

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...

  7. Spring Boot(十)Logback和Log4j2集成与日志发展史

    一.简介 Java知名的日志有很多,比如:JUL.Log4j.JCL.SLF4J.Logback.Log4j2,那么这些日志框架之间有着怎样的关系?诞生的原因又是解决什么问题?下面一起来看. 1.1 ...

  8. Spring Boot系列教程六:日志输出配置log4j2

    一.前言  spring boot支持的日志框架有,logback,Log4j2,Log4j和Java Util  Logging,默认使用的是logback日志框架,笔者一直在使用log4j2,并且 ...

  9. spring boot 1.x完整学习指南(含各种常见问题servlet、web.xml、maven打包,spring mvc差别及解决方法)

    spring boot 入门 关于版本的选择,spring boot 2.0开始依赖于 Spring Framework 5.1.0,而spring 5.x和之前的版本差距比较大,而且应该来说还没有广 ...

随机推荐

  1. linux服务搭建----ssh服务开启

    //ssh  服务     ssh 192.168.88.254         如何开启   service sshd restart     关掉该服务 servicesshd stop     ...

  2. Android监听自身卸载,弹出用户反馈调查

    1,情景分析 在上上篇博客中我写了一下NDK开发实践项目,使用开源的LAME库转码MP3,作为前面几篇基础博客的加深理解使用的,但是这样的项目用处不大,除了练练NDK功底.这篇博客,我将讲述一下一个各 ...

  3. MaterialDesign学习项目

    概述 该项目主要用来学习Material Design Support Library和一些android其他技术,也借鉴了网上一些其他优秀的学习资源.该项目目前主要分为俩大部分(后期可能会有一些增加 ...

  4. MCU实战经验:多种的按键处理

    按键通常有:IO口按键(BUTTON),AD按键(通过AD采样电压),IR(遥控器) 按按键功能分:有短按键,长按键,连续按键.打个比方,遥控电视机,按一下音量键,音量增加1,这个就是短按键.按住音量 ...

  5. R实战 第七篇:绘图文本表

    文本表是显示数据的重要图形,一个文本表按照区域划分为:列标题,行标题,数据区,美学特征有:前景样式.背景央视.字体.网格线等. 一,使用ggtexttable绘图文本表 载入ggpubr包,可以使用g ...

  6. Vi 操作命令

    进入vi的命令  vi filename :打开或新建文件,并将光标置于第一行首  vi +n filename :打开文件,并将光标置于第n行首  vi + filename :打开文件,并将光标置 ...

  7. .net开发微信(1)——微信订阅号的配置

    到微信公众平台按提示一直走下去后,可能遇到的难点就是填写Url和Token了. 开发文档里说,url是自己的服务器地址,Token随便写.但是一直提示Token验证失败. 解决办法:需要在服务器里新增 ...

  8. saltstack安装部署以及简单实用

    一,saltstack简介:     SaltStack是一种新的基础设施管理方法开发软件,简单易部署,可伸缩的足以管理成千上万的服务器,和足够快的速度控制,与他们交流,以毫秒为单位. SaltSta ...

  9. Linux 文件目录解释

    /bin:bin是binary(二进制)的缩写.这个目录是对UNIX系统习惯的沿袭,存放着使用者最经常使用的命令.例如:cp,ls,cat. /boot:这里存放的是启动LINUX时使用的一些核心文件 ...

  10. 两个Web应用必须的Servlet Filter

    其实原文是一个英文文章“Two Servlet Filters Every Web Application Should Have” 文章说了2个Filter: GzipFilter ChcheFil ...