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方法");
    }
}

 

相关新闻

  • WMS智能仓储管理系统-上海魁鲸科技

    WMS智能仓储管理系统-上海魁鲸科技

    为了解决传统仓储管理混乱一团的问题,魁鲸科技打造WMS智能仓储管理系统,实现从采购、领料、生产、仓储到发货及售后等智能化厂内全作业环节。核心功能模块如下: 1、基础信息管理 仓库建模:支持多仓库、多库区、多货架管理,可配置库位规则(如ABC分类、FIFO/LIFO)。 物料管理:管理SKU(库存单位)、批次、效期、条码/二维码/RFID标签绑定。 供应商/客户管理:关联采购、销售订单,实现供应链协同。 2、入库管理 预约入库:供应商预约送货时间,系统自动分配库位。 收货质检:支持PDA(手持终端…

    新闻中心 2025-03-26
  • 魁鲸科技论企业数字化转型的必要性

    魁鲸科技论企业数字化转型的必要性

    在全面数据化的当今社会,各行各业都追求的是效率,传统企业的管理模式已不再适应,因此各行各业使用数据进行发展是一个必然趋势。 从数字化转型的历程来看,从二十世纪末至今,我国已先后经历了零售业数字化、制造业数字化、城市治理数字化等阶段,无论一家公司未来的愿景反正方针是什么,它都必须包括数字化转型,企业要从数字化角度研究创新发展新模式、发现新价值、提升新能力。那么魁鲸科技现在就以一个科技公司的角度来告诉大家企业数字化转型的好处都有哪些?   企业数字化转型的好处 1、提高效率,降低成本 在适…

    新闻中心 2022-08-20
  • 工厂巡检APP定制开发

    工厂巡检APP定制开发

    工厂巡检APP开发服务是指专门为工厂、仓库等场所开发的移动应用APP。通过在智能手机或平板电脑上安装巡检APP,工厂可以对设备、设施、环境进行全面巡检,提高工作效率,降低成本。 一、基于RFID感应巡检的技术支持 RFID感应巡逻系统可以快速准确地执行巡检任务。检查人员只需将手持RFID读写器靠近检查点,即可自动识别RFID标签上的信息,无需手动操作。 二、工厂巡检APP特点 1、设备点检 2、智能巡检 3、一物一码 4、二维码/NFC/RFID 5、巡检到位 三、工厂巡检APP定制开发的好处 …

    新闻中心 2024-09-24
  • 跨境ERP系统开发

    跨境ERP系统开发

    外贸erp系统是专门为外贸企业开发的erp系统。它通常包括产品数据采集、订单提取、采购管理、物流运单、财务会计和配送合作,可以帮助我们更好地完成外贸相关工作。 那么,跨境外贸ERP应该具备哪些核心功能呢? 1、供应链管理:从供应商筛选、采购、库存控制到物流跟踪,确保全球供应链的无缝连接。通过系统管理,企业可以链接信息,优化资源配置,降低库存成本,提高交货准时率。 2、财务管理:自动处理多货币交易,提供准确的财务报告,简化税务合规流程。ERP系统可以集成企业的财务数据,在降低财务风险的同时,为管理…

    新闻中心 2024-11-07
  • 定制开发APP在境外和境内如何上架

    定制开发APP在境外和境内如何上架

    定制开发的APP上架过程可以根据其目标市场(境内或境外)有所不同。下面我将详细介绍如何在中国境内市场以及常见的境外市场(如美国的App Store和Google Play Store)上架APP的流程。 境内上架流程(中国) 在中国上架APP,尤其是Android平台,由于Google Play在中国不可用,你需要考虑上架到各种国内的应用商店,如华为应用市场、小米应用商店、OPPO应用市场等。 流程概览: 获取ICP许可:如果APP涉及网络内容服务,需要先获得ICP(互联网内容提供商)许可。 软…

    新闻中心 2024-04-12
  • 开发高效工单管理系统:提升企业运营效率的关键步骤

    开发高效工单管理系统:提升企业运营效率的关键步骤

    在当今竞争激烈的商业环境中,企业的经营效率直接关系到其市场竞争力和盈利能力。随着企业规模的扩大和业务复杂性的提高,传统的手工或低效的工单管理方法已经难以满足高效、准确、可追溯的管理需求。因此,开发高效的工单管理系统已经成为提高企业运营效率、优化资源配置、提升客户服务体验的关键措施。 传统工单管理痛点: 1、服务渠道割裂:渠道多样化导致企业内部信息同步互通困难,客户工单难以实现统一的集中管理。 2、服务过程难监管:无法清晰直观的查看客户问题与处理进度,导致工单处理耗时长,服务质量难监管。 3、人工…

    新闻中心 2024-08-28
  • 订单管理APP开发

    订单管理APP开发

    在电子商务平台进行购物,在平台下一个订单后,通常会有用户的个人信息、商品信息、订单时间等信息,每个订单都有一个订单号,这些订单信息的组合几乎就是一个订单的详细信息,这些订单信息对于商家而言都是非常必要的。商家为了更好地管理这些订单,订单管理APP系统对在后台进行高效订单统计及处理数据有很大的帮助,那么魁鲸科技就来简单和大家聊聊一款订单管理APP有哪些基础的功能呢? 订单管理APP的功能: 1:订单信息:可根据设置的条件筛选查询到相关信息,订单页包括订单的收货人信息,订购产品信息,订购总金额等详细…

  • 开发一款酒店管理CRM信息系统具备哪些作用?

    开发一款酒店管理CRM信息系统具备哪些作用?

    信息网络技术的发展,给企业带来了巨大的机遇和挑战。对于酒店服务业来说,如何为客户提供优质服务以满足客户个性化需求,成为企业赢得市场竞争、保证利润增长的关键点。客户管理系统(CRM)作为一种新的管理理念,让企业通过对客户信息的分析和挖掘,实现了客户需求的精准化,对于改善客户服务质量,提升客户满意度,提高酒店利润十分重要。 酒店管理CRM信息系统开发具有哪些意义: 针对传统酒店经营管理中信息化程度低,难以有效利用客户数据的问题,提出为中小酒店建立以客户服务质量为中心的 CRM 酒店管理系统。根据酒店…

    新闻中心 2024-04-15
  • 如何有效地利用oa系统开发提升企业工作效率

    如何有效地利用oa系统开发提升企业工作效率

    随着信息化时代的来临,许多企业已经开始采用oa系统进行管理。 oa系统是一种办公自动化系统,可以帮助企业提高工作效率和组织运营管理水平。 下面,本文将从多个方面介绍如何有效利用 oa 系统提升企业工作效率。 1.优化企业流程和管理 oa系统可以整合企业各部门的信息和流程,形成一个统一的信息中心,使企业更加高效地管理各项业务。通过企云云oa系统,企业可以实现在线文件传输、审批流程自动化、信息共享等多种功能,这能够帮助企业更加迅速地处理工作事项,提高工作效率。 2.在线协同办公 在oa系统中,企业员…

    新闻中心 2024-02-27
  • 基于AGV系统的WMS仓库管理系统解决方案

    基于AGV系统的WMS仓库管理系统解决方案

    随着智能制造和物流自动化的快速发展,传统仓库管理模式已难以满足高效率、高准确率、低成本的运营需求。基于AGV(自动导引车)系统的WMS(仓库管理系统)应运而生,成为现代智能仓储的核心解决方案。 一、传统仓库管理模式常常面临的问题 1、库位管理不清晰,货物堆放一团乱,找货理货成大问题 2、人工作业情况不透明,耗时耗力不说数据录入也错漏百出 3、项目进程难以实时追踪,异常订单处理起来十分困难 4、靠人工将数据信息录入ERP系统,速度慢并且不准确 而AGV+WMS的协同方案能够有效解决这些问题,实现仓…

    新闻中心 2025-07-24
在线沟通
客服微信
客服微信
在线咨询
联系我们

联系我们

400-103-7662

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

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

返回顶部