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

 

相关新闻

  • 制造业企业erp管理系统开发

    制造业企业erp管理系统开发

    ERP管理系统是集金融、采购、销售、生产、库存、人力资源等多种功能于一体的综合管理软件。通过整合企业各部门的业务流程和数据,实现信息共享与合作,提高企业的管理效率和竞争力。ERP管理系统不仅可以帮助企业优化资源配置,而且可以提高生产计划的准确性和生产过程的可控性。 一、面对制造业经营来说,生产管理是一大难题,在此过程中会遇到各式各样的难点: 1、生产排产难度大 客户需求多变,工艺复杂,资源有限,产能有限,导致难以高效排产。 2、生产进度难以监控 实时性数据获取滞后,生产过程变数多,生产过程不透明…

    新闻中心 2024年9月18日
  • 软件开发和系统开发的区别

    软件开发和系统开发的区别

    在普通人的认知里,可能软件开发就是系统开发,两者并无区别,其实区别很大,系统开发的范围更大,可以说软件开发只是系统开发的一部分。今天魁进科技就以专业的软件公司角度来带大家简单探讨下软件开发与系统开发实际的区别。 1.软件系统开发,信息系统开发、应用软件系统开发等等,这类是以编写代码的形式进行开发。软件系统是指由系统软件、支撑软件和应用软件组成的计算机软件系统,它是计算机系统中由软件组成的部分。操作系统是管理软硬件资源、控制程序执行,改善人机界面,合理组织计算机工作流程和为用户使用计算机提供良好运…

    新闻中心 2023年2月1日
  • 企业开发小程序有什么意义

    企业开发小程序有什么意义

    在当今数字时代,小程序作为移动互联网的重要入口之一,以其独特的优势深刻影响着企业的运营模式和用户体验。企业开发小程序不仅是对市场趋势的积极响应,也是提高品牌竞争力、优化服务流程、增强用户粘性的关键措施。以下是企业开发小程序的一些重要意义。 1. 降低顾客获取成本,拓宽营销渠道 与传统应用程序相比,小程序可以在不下载和安装的情况下使用,大大降低了用户的门槛。企业可以通过微信、支付宝等平台的巨大流量入口轻松接触潜在用户,实现精准营销。同时,小程序内置的共享功能鼓励用户自发传播,形成裂变传播效果,有效…

    行业经验分享 2024年8月7日
  • 魁鲸科技:信息化软件系统定制解决方案,助力企业管理信息化

    魁鲸科技:信息化软件系统定制解决方案,助力企业管理信息化

    在快节奏的市场环境中,每个企业都寻求建立自己独特的管理模式,这往往成为核心竞争优势。然而,标准化软件产品的使用有时会扼杀企业管理的个性化,而僵化的制度则阻碍管理升级。 此外,独立的部门级软件会造成信息孤岛,阻碍组织内信息的无缝流动。为了克服这些挑战,采用量身定制的信息软件系统成为企业的最佳选择。 上海魁鲸定制企业智能管理软件解决了个性化的应用需求与标准化的软件产品之间的矛盾,能够持续地、动态地满足企业发展管理变化需求的变化。 1、个性化应用程序要求与标准化软件产品的矛盾 企业有独特的管理需求,标…

    新闻中心 2024年3月22日
  • 销售管理系统-上海魁鲸科技

    销售管理系统-上海魁鲸科技

    销售管理系统是企业用于管理销售流程、优化销售绩效、提升客户满意度的重要工具。下面就从系统功能需求以及系统核心模块给大家详细介绍一下销售管理系统。 一、企业销售管理系统需求分析 1、手工记录与管理 大量依赖纸质文档或简单的电子表格来记录客户、商机信息,容易出现数据丢失、错误和更新不及时的情况。 2、缺乏有效的跟进机制 没有明确的跟进流程和责任人,容易出现商机被遗漏或跟进不及时的情况。例如,销售人员忙于开拓新商机,而忽略了对已有商机的持续跟进。 3、缺乏全局视角 每个销售人员只关注自己负责的商机,管…

    新闻中心 2025年3月25日
  • 企业生产管理系统定制开发-上海魁鲸科技

    企业生产管理系统定制开发-上海魁鲸科技

    在当今竞争激烈的市场环境中,企业生产管理系统的开发已经成为提升效率、降低成本、增强竞争力的关键举措。无论是制造业、服务业还是其他行业,生产管理系统的引入都能为企业带来显著的效益。魁鲸为企业打造生产管理系统具体功能如下: 1、手机/PDA扫码报工 作业员可通过扫码进行生产进度汇报,支持一单一码、一工序一码、一批一码、一个一码等。 2、生产流程配置 企业可按需部署自己的生产流程,未来也可按照企业发展随需扩展。 3、生产过程追踪 系统可精细化追踪物料,同时实时追踪订单的派工进度、整单委外进度、工序委外…

    新闻中心 2025年2月18日
  • 涂料库存管理系统提升效率,优化涂料库存管

    涂料库存管理系统提升效率,优化涂料库存管

    涂料库存管理对于企业来说至关重要,它直接关系到成本控制和客户满意度。一个有效的涂料库存管理系统可以帮助企业降低资金占用、减少仓储成本、优化供应链配送,并确保及时满足客户需求。魁鲸科技将详细介绍涂料库存管理的关键策略和方法,以帮助企业提升效率和优化库存管理。 准确预测需求 准确的需求预测是库存管理的基础。通过分析历史销售数据、市场趋势和客户反馈,企业可以制定合理的需求预测模型。这可以帮助企业避免库存积压或库存不足的问题。采用现代化的预测工具和技术,如人工智能和机器学习算法,可以提高预测准确性,更好…

    新闻中心 2023年6月8日
  • 仓库管理系统ERP开发-上海魁鲸科技

    仓库管理系统ERP开发-上海魁鲸科技

    随着互联网技术的不断发展,人们开始热衷于网上购物,线下企业也开始有更多的销售方式,这也使得商店的存储更加困难,使用仓库ERP系统可以有效地提高仓库管理能力,那么软件开发公司可以帮助企业实现什么定制功能呢?  1. 库存管理 系统可实时更新库存信息,支持多仓库、多货位管理。通过设置库存预警线、自动补货等功能,确保库存充足,不过量。同时,系统还支持库存库存、配送等操作,方便企业进行库存管理。  2. 采购管理 系统可根据销售数据和库存自动生成采购计划。支持多种采购方式(如订单采购、合同采购等),实时…

    新闻中心 2025年1月2日
  • 餐饮行业小程序点单便捷 用户复购率提升显著

    餐饮行业小程序点单便捷 用户复购率提升显著

    亲爱的餐饮界朋友们,您是否还在为提高顾客体验和复购率而烦恼?今天给大家分享一个利器 —— 餐饮行业小程序!它不仅让点单变得方便快捷,还成功帮助众多餐厅提升了用户的复购率。 随着科技的不断进步,传统的纸质菜单已经逐渐被淘汰,越来越多的餐厅开始引入微信小程序进行点餐服务。这种轻量化的应用,不需要下载安装,用户只需扫一扫就能轻松使用,大大提升了顾客的用餐体验。 1. 为什么选择餐饮小程序?餐饮行业小程序开发提供了一站式服务,包括在线点餐、预约、支付以及会员管理等多功能集成,大大减少了人工成本和物料消耗…

    新闻中心 2024年12月17日
  • 制造业erp生产管理系统开发

    制造业erp生产管理系统开发

    制造业面临着日益复杂多变的市场环境,客户需求的个性化和多样化趋势明显。这就要求企业能够快速响应市场变化,灵活调整生产计划,而传统的生产管理模式往往难以满足这种需求。引入ERP系统可以帮助企业实现资源集中管理和信息即时共享,从而有效提高企业的市场反应速度和生产调度能力。 行业痛点 1、产业升级和差异化需求:从追求提高规模效益的成本战略到追求实施效率的差异化战略,产品生命周期缩短,价格和利润下降,产品复杂性增加; 2、进度跟踪困难,变化频繁:设计生产周期长,节点多,跨部门协作要求高,进度跟踪困难,变…

    新闻中心 2024年9月18日
在线沟通
客服微信
客服微信
在线咨询
联系我们

联系我们

400-103-7662

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

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

返回顶部