Springboot2 集成log4j2

在任何定制系统开发过程中,健全的日志系统是调试、运维、追查故障的重要保障,因为log4j频频爆出漏洞,魁鲸科技目前主要使用log4j2这个组件替代

基础步骤

  • Spring Boot默认使用的是logback框架,因此需要排除spring-boot-starter-logging
  • 然后引入log4j2框架
  • 配置文件设置使用log4j2的配置路径
  • 程序代码种使用日志门面slf4j框架打印日志。

修改pom.xml文件

spring-boot-starter-web种排除默认的logging包

<!-- springboot dependencies -->
          <dependency>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-web</artifactId>
              <version>${spring-boot-starter.version}</version>
              <exclusions>
                  <exclusion>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-starter-logging</artifactId>
                  </exclusion>
              </exclusions>
          </dependency>

通过依赖树排除第三方的框架内对logback等冲突包的依赖
Springboot2 集成log4j2

Springboot2 集成log4j2

找到并排除

Springboot2 集成log4j2

在resource目录下新增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">  <!-- 配置日志文件输出目录,此配置将日志输出到tomcat根目录下的指定文件夹 -->
    <properties>
        <property name="LOG_HOME">./WebAppLogs/logs</property>
    </properties>
    <!--先定义所有的appender-->
    <appenders>    <!-- 优先级从高到低分别是 OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL -->
        <!-- 单词解释: Match:匹配 DENY:拒绝 Mismatch:不匹配 ACCEPT:接受 -->
        <!-- DENY,日志将立即被抛弃不再经过其他过滤器; NEUTRAL,有序列表里的下个过滤器过接着处理日志; ACCEPT,日志会被立即处理,不再经过剩余过滤器。 -->
        <!--输出日志的格式     %d{yyyy-MM-dd HH:mm:ss, SSS} : 日志生产时间     %p : 日志输出格式     %c : logger的名称     %m : 日志内容,即 logger.info("message")     %n : 换行符     %C : Java类名     %L : 日志输出所在行数     %M : 日志输出所在方法名     hostName : 本地机器名     hostAddress : 本地ip地址 -->
        <!--这个输出控制台的配置-->
        <console name="Console" target="SYSTEM_OUT">      <!--输出日志的格式-->
            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] - [%t] [%p] - %logger{1.} - %m%n"/>
            <!--<PatternLayout pattern="[%d{HH:mm:ss:SSS}] - (%F:%l) - %m%n"/>-->
            <!--<PatternLayout pattern="[%d{HH:mm:ss:SSS}] (%F:%L) %m%n" />-->
        </console>
        <!-- 这个会打印出所有的info及以下级别的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档-->
        <!-- TRACE级别日志 ; 设置日志格式并配置日志压缩格式,压缩文件独立放在一个文件夹内, 日期格式不能为冒号,否则无法生成,因为文件名不允许有冒号,此appender只输出trace级别的数据到trace.log -->

        <RollingFile name="RollingFileTrace" immediateFlush="true" fileName="${LOG_HOME}/trace.log"
                     filePattern="${LOG_HOME}/trace_%d{yyyy-MM-dd-HH}-%i.log.zip">
            <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>

            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] - [%t] [%p] - %logger{36} - %m%n"/>

            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>

                <SizeBasedTriggeringPolicy size="10 MB"/>

            </Policies>
            <!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件,这里设置了20 -->
            <DefaultRolloverStrategy max="20">
                <!--这里的age必须和filePattern协调, 后者是精确到HH, 这里就要写成xH, xd就不起作用           另外, 数字最好>2, 否则可能造成删除的时候, 最近的文件还处于被占用状态,导致删除不成功!-->

                <Delete basePath="${LOG_HOME}" maxDepth="2">
                    <IfFileName glob="trace_*.zip"/>
                    <!-- 保存时间与filePattern相同即可 -->
                    <!-- 如果filePattern为:yyyy-MM-dd-HH:mm:ss, age也可以为5s,表示日志存活时间为5s -->
                    <IfLastModified age="168H"/>

                </Delete>

            </DefaultRolloverStrategy>

        </RollingFile>

        <RollingFile name="RollingFileDebug" immediateFlush="true" fileName="${LOG_HOME}/debug.log"
                     filePattern="${LOG_HOME}/debug_%d{yyyy-MM-dd-HH}-%i.log.zip">
            <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>

            <PatternLayout pattern="[%d{HH:mm:ss:SSS}] - [%t] [%p] - %logger{36} - %m%n"/>

            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>

                <SizeBasedTriggeringPolicy size="10 MB"/>

            </Policies>

            <DefaultRolloverStrategy max="20">
                <Delete basePath="${LOG_HOME}" maxDepth="2">
                    <IfFileName glob="debug_*.zip"/>

                    <IfLastModified age="168H"/>

                </Delete>

            </DefaultRolloverStrategy>

        </RollingFile>     <!-- info日志配置 -->
        <RollingFile name="RollingFileInfo" immediateFlush="true"
                     fileName="${LOG_HOME}/info.log"
                     filePattern="${LOG_HOME}/info_%d{yyyy-MM-dd-HH}-%i.log.zip">       <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter
                    level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout
                    pattern="[%d{HH:mm:ss:SSS}] - [%t] [%p] - %logger{36} - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>

                <SizeBasedTriggeringPolicy size="10 MB"/>

            </Policies>
            <DefaultRolloverStrategy max="20">
                <Delete basePath="${LOG_HOME}" maxDepth="2">
                    <IfFileName glob="info_*.zip"/>

                    <IfLastModified age="168H"/>

                </Delete>

            </DefaultRolloverStrategy>
        </RollingFile>     <!-- warn日志配置 -->
        <RollingFile name="RollingFileWarn"
                     immediateFlush="true"
                     fileName="${LOG_HOME}/warn.log" filePattern="${LOG_HOME}/warn_%d{yyyy-MM-dd-HH}-%i.log.zip">
            <ThresholdFilter
                    level="warn" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout
                    pattern="[%d{HH:mm:ss:SSS}] - [%t] [%p] - %logger{36} - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>

                <SizeBasedTriggeringPolicy size="10 MB"/>

            </Policies>
            <DefaultRolloverStrategy max="20">
                <Delete basePath="${LOG_HOME}" maxDepth="2">
                    <IfFileName glob="warn_*.zip"/>

                    <IfLastModified age="168H"/>

                </Delete>

            </DefaultRolloverStrategy>
        </RollingFile>     <!-- error日志配置 -->
        <RollingFile
                name="RollingFileError" immediateFlush="true"
                fileName="${LOG_HOME}/error.log" filePattern="${LOG_HOME}/error_%d{yyyy-MM-dd-HH}-%i.log.zip">
            <ThresholdFilter
                    level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout
                    pattern="[%d{HH:mm:ss:SSS}] - [%t] [%p] - %logger{36} - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>

                <SizeBasedTriggeringPolicy size="10 MB"/>

            </Policies>
            <DefaultRolloverStrategy max="20">
                <Delete basePath="${LOG_HOME}" maxDepth="2">
                    <IfFileName glob="error_*.zip"/>

                    <IfLastModified age="168H"/>

                </Delete>

            </DefaultRolloverStrategy>
        </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="RollingFileDebug"/>

            <appender-ref ref="RollingFileTrace"/>

            <appender-ref ref="RollingFileInfo"/>

            <appender-ref ref="RollingFileWarn"/>

            <appender-ref ref="RollingFileError"/>

        </root>

    </loggers>
</configuration>

配置application.yml

server:
  port: 8080
spring:
  banner:
    charset: utf-8
logging:
  level:
    # 根据不同的类设定不同级别
    root: info
    study.*: debug
    nobyte.*: debug
  config: classpath:log4j2-spring.xml

 

使用slf4j打印

package study.springboot.ioc;

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Component;

/**
 * CustomService
 *
 * @author linkanyway
 * @version 1.0
 * @date 2022/04/06 20:37
 */
@Component("CustomService")
@Slf4j
public class CustomServiceImpl implements CustomService {

    /**
     * 构造器
     */
    public CustomServiceImpl() {
        log.debug ("CustomService被实例化,容器装配制定了Lazy因此容器装载时候不会立刻初始化,只有第一次调用才会初始化");
    }

    /**
     * 重载print方法
     */
    @Override
    public void print() {
    log.debug (this.getClass ().getCanonicalName ()+" 被调用了print方法");
    }
}

 

相关新闻

  • 电商类APP定制开发

    电商类APP定制开发

    在数字化浪潮席卷全球的今天,电商已成为商业发展的核心驱动力之一。无论是传统企业转型,还是新兴品牌崛起,一款功能强大、用户体验优秀的电商APP都是抢占市场的关键武器。而电商类APP定制开发,正是为企业量身打造差异化竞争解决方案的最佳选择。 一、为什么选择定制化电商APP? 与通用的电商平台(如淘宝、京东)或模板化SaaS工具不同,定制开发电商APP具备以下核心优势: 1、品牌独特性 定制APP能完全匹配企业品牌调性,从UI设计到交互逻辑,塑造独特的用户体验,避免“千篇一律”的模板化风格。 2、功能…

    新闻中心 2025年7月11日
  • 校园租赁小程序开发-上海魁鲸科技

    校园租赁小程序开发-上海魁鲸科技

    在如今智能飞速发展的时代,校园租赁市场正经历着史无前例的新变革。小程序的产生,如同一股强劲趋势,正在推动校园租赁行业进入一个新的发展阶段,为学生和租赁商户带来前所未有的便捷和机会。 一、为何要开发校园小程序? 1、传统校园租赁市场窘境: 以往,校园租赁市场依赖于线下交易。假如学生想租书、单车、电子产品等物品,她们往往需要在校园里到处寻找租赁商店,这不但耗费时间精力,而且选择范围有限。针对租赁卖家来说,传统的线下宣传方式效果有限,没法接触到大量潜在客户。此外,他们在存货管理和订单处理层面正面临着很…

    新闻中心 2025年1月10日
  • 质检溯源小程序系统:提升产品质量管理和合规性的关键工具

    质检溯源小程序系统:提升产品质量管理和合规性的关键工具

    在当今高度竞争的市场环境中,产品质量的管理和追溯已经成为制造和供应链管理中不可或缺的一环。为了确保产品的质量、安全和合规性,企业需要建立高效的质检溯源体系。质检溯源小程序系统正是在这一背景下崭露头角的工具,它不仅提高了质检过程的可追溯性,还为企业带来了诸多好处。 魁鲸科技是业内领先的定制开发公司,专注于提供高度专业化的质检溯源小程序系统,企业通过与魁鲸科技合作,获得一个高度定制化、安全可靠、与行业需求紧密契合的质检溯源小程序系统,从而提升产品质量管理的效率和效果,增强市场竞争力。 什么是质检溯源…

    新闻中心 2023年10月2日
  • CRM系统开发

    CRM系统开发

    无论企业规模如何,建立和维护强大的客户关系都是业务成功的基础。然而中小企业在客户关系管理方面往往会有或多或少的欠缺,从而失去很多机会,市场竞争能力逐渐降低。比如:客户信息无法沉淀、客户信息流失?客户问题响应慢、客户体验感差?等诸多问题都是导致中小企业缺乏市场竞争力的关键因素。因此越来越多的企业选择CRM系统开发。 一、选择CRM系统需要关注的点? 不同行业对于CRM系统的需求也是不同的,因此在选择CRM系统时应选择适合自身企业发展的,同时在选择前我们需要关注几点: 1、功能性 除了常规的功能外,…

    新闻中心 2024年10月10日
  • HarmonyOS Next-从应用开发到上架全流程解析

    HarmonyOS Next-从应用开发到上架全流程解析

    随着万物互联时代的加速到来,鸿蒙生态正以惊人的速度发展。HarmonyOS Next作为华为推出的全新操作系统,不仅彻底摆脱了对安卓的依赖,更为开发者带来了前所未有的机遇。本文将全面解析HarmonyOS Next从应用开发到上架的全流程,助您抢占鸿蒙生态先机。 一、什么是HarmonyOS Next? HarmonyOS Next是华为在其鸿蒙操作系统上的最新版本,旨在提供更加丰富的用户体验和更强大的开发能力。与传统操作系统不同,HarmonyOS强调“多设备协同”和“分布式技术”,其核心理念…

    新闻中心 2025年12月2日
  • 微信服务:民生为本,智慧政务再上新台阶

    微信服务:民生为本,智慧政务再上新台阶

    今天,人们对多元化的信息传播内容和方式有着“随手可及”的便捷服务需求和日益增长的各种要求。智慧生活不仅仅表现在人们每日衣食住行的互联网化上,服务型政府改革和随之兴起的智慧政务建设也打造出全新的高效、公开、透明的信息化政民互动模式,使人民体会到“以民为本”更具时代感的含义。   2014年8月18日,广东省湛江市,边检官兵指导钻井平台工作人员扫描“南粤边检”政务微信平台二维码。供图/视觉中国 从铅字猜想到智慧现实 2018年,李克强总理在政府工作报告里指出,要深化“放管服”改革,深入推进…

    新闻中心 2022年6月26日
  • 一体化微信开发解决方案:上海魁鲸科技全方位助力企业微信营销

    一体化微信开发解决方案:上海魁鲸科技全方位助力企业微信营销

    在移动互联网时代,微信早已超越社交工具的范畴,成为企业连接用户、打造品牌、实现商业转化的核心阵地。无论是服务千万用户的小程序,还是精准触达客户的公众号,亦或是高效协同的企微SCRM,微信生态蕴藏着巨大的商业潜力。 上海魁鲸科技致力于打造智能化的微信小程序、公众号开发解决方案,助力企业构建微信生态内的数字化解决方案。 一、微信开发解决方案 提供全面的微信生态开发服务,从微信的公众号到小程序,促进企业微信营销。 1、微信小程序开发 基于微信小程序框架开发轻量级应用,无需下载安装,即用即走 √原生小程…

    新闻中心 2025年11月10日
  • 开发CRM客户管理系统对于提高企业营销的作用!

    开发CRM客户管理系统对于提高企业营销的作用!

    crm即客户关系管理,是通过信息技术和互联网技术来协调企业和客户在销售、营销、服务和售后等方面的交互,向客户提供新式而个性化的交流服务过程。 crm这一概念在最近的电子商务中开始流行,也逐渐被各个企业所认知和接受。有的企业认为对于crm的投入直接影响到企业客户的稳定与拓展,因此对于crm的投入力度十分大。而有些企业则感觉对于crm的投入与实际收益不成正比,达不到预期效果,因此认为crm概念对于企业的作用不大。 进入互联网时代,企业的发展必然要与互联网相互融合,而互联网为企业提供的最为广阔资源就是…

    新闻中心 2024年3月21日
  • 为什么企业要拥有自己的OMS订单管理系统

    为什么企业要拥有自己的OMS订单管理系统

    在当今竞争激烈的市场环境中,企业面临着前所未有的挑战和机遇。随着电子商务的蓬勃发展,订单处理的效率和准确性直接关系到客户满意度、运营效率和市场竞争力。因此,拥有高效灵活的OMS订单管理系统成为企业不可缺少的战略选择,魁鲸小编今天就站在专业的角度告诉你为什么企业要拥有自己的OMS订单管理系统。 一、OMS订单管理系统的行业痛点和需求 1、渠道分散,消费者决策路径多元 需求分层、决策路径多元化,品牌加速全域数字营销与商品供给。 2、订单结构复杂 需求多样化导致订单品类繁多,个性化消费的崛起,加剧了订…

    行业经验分享 2024年8月1日
  • 上门家政预约小程序定制开发

    上门家政预约小程序定制开发

    在快节奏的现代生活中,高质量的家政服务需求日益增长。随着移动互联网的普及,传统电话预约方式已无法满足市场需求。上门家政预约小程序正成为家政企业连接客户、提升服务效率的利器。 一、为什么家政行业需要预约小程序? 1、市场需求旺盛 现代双职工家庭、老龄化社会趋势下,保洁、育儿、养老、保姆等家政服务需求持续攀升。消费者对服务便捷性、专业性的要求也越来越高。 2、传统模式痛点明显 电话预约效率低、服务人员管理难、订单容易出错、支付方式单一、客户体验不佳等问题制约着家政公司的发展。 3、数字化转型必然 小…

    新闻中心 2025年10月15日
在线沟通
客服微信
客服微信
在线咨询
联系我们

联系我们

400-103-7662

售前咨询邮箱:
sales@king-v.com

工作时间:
法定工作日 9:00-18:00

返回顶部