springboot+log4j2日志框架配置(maven)

     2022-03-27     616

关键词:

参考Spring Boot官方文档 日志部分

Spring Boot默认情况下,当使用"Starters" 使用Logback输出日志
, 还包括适当的Logback路由, 确保其他的日志框架(Java Util Logging, Commons Logging, Log4j, SLF4J)都能正常使用



Sping Boot文档的 26.5 Custom Log Configuration 章节,说明了自定义日志配置方法

多样的日志系统可以通过

  1. 添加适当的日志框架库到classpath
  2. 适当的配置配置文件加入到classpath的根目录 或者 其他的本地目录, 使用Spring配置 loggin.config 配置指定配置文件

依赖于开发者选择的日志框架. 这些对应的配置文件会被加载

日志框架 配置文件
Logback logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
Log4j2 log4j2-spring.xml, log4j2.xml
JDK(JAVA Util Logging) logging.properties

引入Log4j2日志框架

Log4j2为何物就不介绍了. Log4j2官网

配置的方案 在官方文档 77.2 Configure Log4j for Logging

1. Maven依赖配置

pom.xml中去掉Logback, 引入log4j2

<!-- 节选 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-log4j2 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

2. 配置文件

2.1 log4j2.xml

使用xml格式配置文件, 无需添加额外的依赖库.

2.2 log4j2.yaml / log4j2.yml

使用 yaml/yml格式配置文件. 需要额外引入依赖库

<!-- 解析yml配置 -->
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
</dependency>


<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-yaml</artifactId>
</dependency>

2.3 log4j2.json

使用 json 格式配置文件, 需要额外引入依赖库

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
</dependency>

3. 修改spring boot配置

指定spring boot配置文件

application.yaml文件配置如下

logging:
  config: classpath:log4j2.xml


Log4j2日志配置

如需了解Log4j2详尽的配置, 可访问官方文档

概述

大概介绍一下Log4j2的基本信息

日志的Level分为:

  1. trace (追踪)
  2. debug (调试)
  3. info (信息)
  4. warn (警告)
  5. error (错误)
  6. fatal (严重错误)




这里介绍一下博主经常使用的一种日志方式 RollingFileAppender

以一个具体的配置为例

<?xml version="1.0" encoding="UTF-8" ?>
<Configuration status="trace" strict="true" name="LogConfig">
    <Properties>
        <Property name="filepath">/tmp/log4j2</Property>
    </Properties>
    <Appenders>
        <Console name="STDOUT" target="SYSTEM_OUT">
            <PatternLayout>
                <Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern>
            </PatternLayout>
        </Console>
        <RollingFile name="logService"
                     fileName="${filepath}/logService.log"
                     filePattern="${filepath}/bak/logService-%d{yy-MM-dd HH:mm:ss}.log.gz">
            <PatternLayout>
                <Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern>
            </PatternLayout>
            <Policies>
                <CronTriggeringPolicy schedule="1 * * * * ?" evaluateOnStartup="true"/>
            </Policies>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Logger name="fileLogger" level="debug" additivity="false">
            <AppenderRef ref="logService"/>
            <AppenderRef ref="STDOUT"/>
        </Logger>


        <Root level="trace">
            <AppenderRef ref="STDOUT"/>
        </Root>
    </Loggers>


</Configuration>

1. Configuration 参数

  1. status: Level枚举型, 控制输出Log4j事件信息, 默认 error
  2. name: 配置名称
  3. strict: 是否使用严格的XML格式. 推荐使用, 规范开发者的配置编写, 不支持jsonp配置
  4. ... 其他几个配置可以参考官方文档

2. Properties

设置配置文件全局的参数变量. 用于减少自定义配置信息的重复编码.

<Properties>
    <Property name="filepath">/tmp/log4j2</Property>
</Properties>

配置下文中, 可以使用 ${filepath} 来代替 /tmp/log4j2

3. Appenders

Log4j2提供了丰富的Appender

  1. AsyncAppender 设置appender异步方式输出日志
  2. CassandraAppender 输出至Cassandra存储
  3. ConsoleAppender 输出控制台
  4. FailoverAppender 设置appender错误重试
  5. FileAppender 输出至文件
  6. FlumeAppender 输出至Flume
  7. JDBCAppender 输出至JDBC连接的关系型数据库表
  8. JMS Appender 输出至消息服务
  9. JPAAppender 输出至使用JPA连接的关系行数据库
  10. HttpAppender 输出至Http Service
  11. KafkaAppender 输出至Kafka
  12. MemoryMappedFileAppender 输出至内存
  13. NoSQLAppender 输出至NoSQL数据库
  14. OutputStreamAppender File/Socket类型的Appender
  15. RandomAccessFileAppender 性能是FileAppder的0.2-2倍
  16. RollingFileAppender 输出至文件, 文件能按照规则打包文件
  17. RollingRandomAccessFileAppender 同上
  18. SMTPAppender 邮件形式输出
  19. SocketAppender socket方式发送日志

项目中比较常用的是 ConsoleAppenderRollingFileAppender.

接下来对上述的Appender配置参数的说明

<Appenders>
    <!-- ConsoleAppender -->
    <!-- name Appender名称 -->
    <!-- target 枚举型(SYSTEM_OUT, SYSTEM_ERR). 默认 SYSTEM_OUT -->
    <Console name="STDOUT" target="SYSTEM_OUT">
        <!-- 输出格式 详细配置见下文 -->
        <PatternLayout>
            <Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern>
        </PatternLayout>
    </Console>


    <!-- RollingFileAppender -->
    <!--  fileName 输出的问题名称, 使用绝对路径确保日志位置的正确性, 并且确保目录有进程用户可写权限  -->
    <!-- filePattern 日志回滚的文件命名规则 -->
    <RollingFile name="logService"
                 fileName="${filepath}/logService.log"
                 filePattern="${filepath}/bak/logService-%d{yy-MM-dd HH:mm:ss}.log.gz">
        <PatternLayout>
            <Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern>
        </PatternLayout>
        <Policies>
            <!-- 按Cron定时任务回滚文件-->
            <!-- schedule Cron表达式 -->
            <!-- evaluateOnStartup  (规则: 启动时,检查判断目标文件最后的修改时间, 如果cron规则判断该文件需要回滚,则直接回滚文件.) 是否开启该规则操作 -->
            <CronTriggeringPolicy schedule="1 * * * * ?" evaluateOnStartup="true"/>
        </Policies>
    </RollingFile>
</Appenders>

3.2 日志输出规则 Layouts

Layout有多种格式输出

  1. CSV
  2. GELF
  3. HTML
  4. JSON
  5. Pattern
  6. ....

项目中一般使用Pattern 按行输出逐条信息, 配置如下:

<!-- 节选配置 -->
<PatternLayout>
    <Pattern>[%d] - [%c] - [%highlight{%level}] - [%method] - [%t] - %msg%n</Pattern>
</PatternLayout>

% + char/word 代表一种输出的信息或者格式

时间 %d / %date

格式 输出
%d, %d{DEFAULT} 2012-11-02 14:34:02,781
%d{UNIX} 1351866842
%d{UNIX_MILLIS} 1351866842781
%d{yyyy-MM-dd HH:mm:ss,SSS} 2012-11-02 14:34:02,781

类 %c / %logger

输出调用的类名

%c{number} , 控制类型的长度

等级 %level

输出等级 TRACE, DEBUG, INFO, WARN, ERROR, FATAL

颜色格式 %highlight

%heighlight{xxx}

xxx将会带有颜色样式, 并且和Level相关, 一般用于debug调试信息使用

日志内容 %m / %msg / %message

可添加文本样式

换行 %n

根据操作系统的输出不同的换行标识符用户日志换行, 最好别使用 , 等换行符号

其他还有很多标识符号, 参考 官方文档



4. Loggers

  1. 必须包含一个 Root 元素, 不设置 Root 元素, 将会默认使用类似如下的配置

<Root level="error">
    <AppenderRef ref="Console" />
</Root>

  1. 配置其他开发者自定义的 Logger

<Loggers>
    <!-- name 必填且唯一 -->
    <!-- level 设置输出最低级别 默认error -->
    <!-- additivity 是否在父Logger输出, 默认 true -->
    <Logger name="fileLogger" level="debug" additivity="false">
        <!-- 上文中定义的Appender name -->
        <AppenderRef ref="logService"/>
        <AppenderRef ref="STDOUT"/>
    </Logger>


    <Root level="ERROR">
        <AppenderRef ref="STDOUT"/>
    </Root>
</Loggers>


使用Logger

以demo为例

package info.chiwm.log4j2.service;


import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Service;


/**
 * @author [email protected]
 * @ClassName: Log4j2ServiceImpl
 * @Description:
 * @date 2018/1/4 上午11:10
 */


@Service
public class Log4j2ServiceImpl implements Log4j2Service {
    // 使用LogManager获取配置Logger
    private static Logger logger = LogManager.getLogger("fileLogger");


    @Override
    public void info(String msg) {


        // 输出日志
        // 特别注意 不要使用 `+` 去拼接信息, 这样在控制输出级别之后, 有些日志操作不会打印, 但是它去操作了新字符串创建, 使用 `{}` 去代替 `+`
        logger.info("info {}", msg);
    }


    @Override
    public void error() {
        logger.error("error");
    }


    @Override
    public void warn() {
        logger.warn("warn");
    }


    @Override
    public void debug() {
        logger.debug("debug");
    }


    @Override
    public void trace() {
        logger.trace("trace");
    }
}

总结

前面的配置步骤,配置,使用步骤,大概描述了Log4j2的使用.

欢迎评论区指出错误或者探讨相关的问题

springboot日志框架

...有很多日志系统,例如,JavaUtilLogging,Log4J,Log4J2,Logback等。SpringBoot也提供了不同的选项,比如日志框架可以用logback或log4j等。 默认的日志框架logback例如,maven依赖中添加了spring-boot-starter-logging。<dependency><groupId>org.spri 查看详情

最全的springboot+logback日志配置教程

项目中日志系统是必不可少的,目前比较流行的日志框架有log4j、logback等,可能大家还不知道,这两个框架的作者是同一个人,Logback旨在作为流行的log4j项目的后续版本,从而恢复log4j离开的位置。另外slf4j(SimpleLoggingFacadeforJava)... 查看详情

springboot日志管理配置logback-spring.xml

几种常见的日志Log4j:是最早的日志框架,是apach旗下的,可以单独使用,也可配合日志框架JCL使用;Log4j2:apach旗下的关于log4j的升级版;Logback:是基于slf4j接口实现的一套日志框架组件;(Logback是由log4j创始人设计的又一个开... 查看详情

springboot实践:logback日志配置

...、logback是什么?工作中一直用的是log4j日志框架,接触了SpringBoot后,因为logback是默认框架,才开始进行了解。来看下官网的相关介绍。 可以看到,logback是log4j的进化版,是为了替代log4j的。logback分三个模块:logback-core:核... 查看详情

springboot怎么看日志

参考技术Aspringboot内部使用CommonsLogging来记录日志,但也保留外部接口可以让一些日志框架来进行实现,例如JavaUtilLogging,Log4J2还有Logback。如果你想用某一种日志框架来进行实现的话,就必须先配置,默认情况下,springboot使用Logba... 查看详情

springboot日志框架选型——log4j2的配置与使用

...最快最好的日志框架。本次介绍的版本是​​​2.18.0​​SpringBoot日志框架 查看详情

springboot+log4j2使用配置(转)

...到Bug或错误,此时则需要日志记录来查找发现问题所在。SpringBoot可以集成很多不同的日志系统,目前有关日志的开源代码很多,如log4j、sl4j和log4j2,为什么我选择使用log4j2呢,看完下面两篇性能的对比,相信你也会选择log4j2 查看详情

重学springboot系列之日志框架与全局日志管理(代码片段)

重学SpringBoot系列之日志框架与全局日志管理日志框架的体系结构五花八门的日志工具包日志框架日志门面日志门面存在的意义日志框架选型日志级别常见术语概念解析logback日志框架配置application配置文件实现日志配置日志格式... 查看详情

springboot4-日志配置

日志配置Springboot支持Log4j、Logback等作为日志框架。默认情况下使用Logback作为框架。配置日志前日志情况._________/\\/___‘_____(_)______\\\(()\___|‘_|‘_||‘_\/_`|\\\\\/___)||_)|||||||(_||))))‘|____|.__|_||_|_||_\__,|////=========|_|======== 查看详情

springboot使用log4j2&logback输出日志到ekl

文章目录1、ELK介绍2、环境、软件准备3、ELK环境搭建4、SpringBoot配置示例4.1、Log4j2方式配置4.2、Logback方式配置1、ELK介绍ELK是Elasticsearch,Logstash,Kibana的缩写,Elasticsearch是开源分布式搜索引擎,提供搜集、分析、存储数据等功能,Lo... 查看详情

springboot配置log4j日志

...志使用AOP统一处理Web请求日志导入AOP依赖写一个切面类@(springboot配置Log4j日志)首先要导入log4j属性文件Log4j.properties在resources文件夹下导入log4j.properties文件,复制下面的内容时,每行后面如果有空格的话一定要去掉,log4j.appender.Fi... 查看详情

java日志框架学习--jul和log4j--上(代码片段)

...与Logback及其相似具有插件式结构、配置文件优化等特征SpringBoot1.4版本以后就不再支持log4j,所以第二个版本营运而生JCLSLF4j日志门面和日志框架的区别日志框架技术JUL、Logback、Log4j、Log4j2用 查看详情

springboot中的日志管理

本案例中可以了解,怎么配置日志的输出路径,输出格式(比如说zip格式),按日期进行划分(今天的日志输出为一个文件,明天的日志输出到另一个文件),在按日期划分的同时又按文件大小划分(比如说每天的日志记录很多... 查看详情

log4j2.xml基本配置

slf4j是对日志框架实现制定的一个日志规范、标准、接口,不能独立使用,需要与具体的日志框架实现配合使用。log4j、logback、log4j2分别是三种日志框架实现,其中log4j2是log4j1.x和logback的改进版。下面介绍一下xml格式的log4j2配置... 查看详情

springboot之日志记录

SpringBoot之日志记录SpringBoot支持集成Java世界主流的日志库。如果对于Java日志库不熟悉,可以参考:细说Java主流日志工具库关键词:log4j,log4j2,logback,slf4j日志格式控制台输出彩色打印文件输出日志级别日志组日志配置文件SpringBoot... 查看详情

springboot与日志框架1(代码片段)

一、日志框架1.无论在什么系统,日志框架都是一个重要角色,所以理解和用好日志框架是相当重要的;像JDBC一样,日志框架分为接口层的门面和具体的实现组成。2.市面上的产品:2.1门面:SLF4J(SimpleLogginFacadeforJava)、JCL(JakartaCom... 查看详情

springboot关于log4j日志配置(代码片段)

自动加载配置文件:(1)如果采用log4j输出日志,要对log4j加载配置文件的过程有所了解。log4j启动时,默认会寻找sourcefolder下的log4j.xml配置文件,若没有,会寻找log4j.properties文件。然后加载配置。配置文件放置位置正确,不用... 查看详情

外置tomcat启动springboot应用,日志profile功能失效

参考技术A日志profile相关配置如下在主配置文件application.properties中声明profile为dev环境spring.profiles.active=dev在application-dev.properties文件中指定了日志配置文件为类路径下的log4j2-dev.xmllogging.config=classpath:log4j2-dev.xml但是项目启动的时... 查看详情