SpringMVC使用maven配置SLF4J和Log4J2

Log4j2+Spring5+SpringMVC+Mybatis 在maven项目中,log4j2 无法输出框架自身日志的解决方式 以 ssm 模式搭建的项目,使用Log4j时,日志输出一切正常。 当升级使用spring5以上版本后,发现老版本的Log4j,已经不支持了,只能升级为Log4j2 版本。 Log4j2 的相关配置,参见:https://blog.youkuaiyun.com/yangshangwei/article/details/75146896 当把log4j2配置文件,都配置完后。 程序运行,发现,除了能正常输... 阅读详情

本篇的重点在于LOG4J2,它与LOG4J 第一版区别很大。我将教程放在后面,将一些知识放在前面,所以想看教程的直接拉到后面即可。

理论知识

关于两版的区别

两版的不同,直接的表现是在Maven仓库中log4j 表示第一版,org.apache.logging.log4j 表示第二版。另外应当注意:

  1. Log4J2.4及更高版本需要Java 7,版本2.0-alpha1至2.3需要Java 6
  2. XML配置已被简化,与Log4j 1.x不兼容
  3. 版本2.4开始支持通过属性文件进行配置,但与Log4j 1.x不兼容
  4. 支持通过JSON或YAML进行配置,但这些格式需要额外的运行时依赖关系
  5. 虽然Log4j 2与Log4j不直接兼容1.x,但提供了桥接依赖可以减少代码的修改

寻找配置文件的原理

log4j2允许使用log4jConfiguration 上下文参数在web.xml中指定配置文件。Log4j2将通过以下方式搜索配置文件

  1. 如果提供了一个位置,它将搜索servlet上下文资源,即配置log4jConfiguration
  2. 如果没有定义位置,则按照如下所有定位显式配置:

    1. 检测 log4j.configurationFile 系统属性,如果属性存在,就从它指定的文件中加载配置
    2. 在类路径上寻找名为 log4j2-test.json 或者 log4j2-test.jsn 的文件,如果文件存在,就从该文件加载配置
    3. 在类路径上寻找名为 log4j2-test.xml 的文件,如果文件存在,就从该文件加载配置
    4. 在类路径上寻找名为 log4j2.json 或者 log4j2.jsn 的文件,如果文件存在,就从该文件加载配置
    5. 在类路径上寻找名为 log4j2.xml 的文件,如果文件存在,就从该文件加载配置
  3. 使用类路径和文件URL的正常搜索序列用于定位配置文件

Tomcat版本的差异

出于性能原因,容器经常忽略已知不包含TLD或ServletContainerInitializer的某些JAR,并且不扫描它们的Web片段和初始化器。重要的是,Tomcat 7 <7.0.43将忽略名为log4j * .jar的所有JAR文件,从而阻止此功能的工作。这在Tomcat 7.0.43,Tomcat 8和更高版本中已经修复。在Tomcat 7 <7.0.43中,您将需要更改catalina.properties,并从jarsToSkip 属性中删除”log4j * .jar”。如果他们跳过扫描Log4j JAR文件,您可能需要在其他容器上执行类似的操作。

关于log4j-web的重要性

Log4j2-web.jar文件是配置为在应用程序中的任何其他Web片段之前的Web片段。它包含容器自动发现和初始化的ServletContainerInitializer(Log4jServletContainerInitializer)。这将Log4jServletContextListener和 Log4jServletFilter添加到ServletContext中。这些类正确初始化并初始化Log4j配置。

对于某些用户,自动启动Log4j是有问题的或不合需要的。您可以使用isLog4jAutoInitializationDisabled上下文参数轻松禁用此功能。只需将其添加到您的部署描述符,值为“true”即可禁用自动初始化。您必须在web.xml中定义context参数。如果以编程方式设置,Log4j将检测到设置为时已晚。

    <context-param>
        <param-name> isLog4jAutoInitializationDisabled </ param-name>
        <param-value> true </ param-value>
    </context-param>

禁用自动初始化后,您必须像Servlet 2.5 Web应用程序一样初始化Log4j 。您必须这样做,以便在执行任何其他应用程序代码(如Spring Framework启动代码)之前进行此初始化。

您可以自定义侦听器的行为并使用log4jContextName, log4jConfiguration和/或isLog4jContextSelectorNamed上下文参数进行过滤。在下面的“ 上下文参数”部分中阅读更多信息。您不得在部署描述符(web.xml)中或在Servlet 3.0或更高版本应用程序中的其他初始化程序或侦听器中 手动配置Log4jServletContextListener或Log4jServletFilter,除非禁用了使用 isLog4jAutoInitializationDisabled 自动初始化。这样做会导致启动错误和未指定的错误行为。

教程开始

编写pom.xml

<properties>        
    <slf4j.version>1.7.25</slf4j.version>
    <log4j.version>2.8.2</log4j.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>${slf4j.version}</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <!--用于与sfl4j保持桥接-->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>${log4j.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-web</artifactId>
        <version>${log4j.version}</version>
        <scope>runtime</scope>
    </dependency>
</dependencies>

注意log4j-web是很重要的,在Java EE Web应用程序中使用Log4j或任何其他日志记录框架时,必须特别小心。由于Web应用程序中的类加载器的性质,Log4j资源无法通过正常方式进行清理。为了避免这些问题,务必包含log4j-web

设置web.xml

Servlet 3.0或更高版本是无需配置web.xml的,它默认指定配置文件应命名为log4j2.xml,并要求放置在classpath中,所以在maven项目里,只要在resources目录下新建log4j2.xml文件即可,否则要设置

<context-param>
    <param-name>log4jConfiguration</param-name>
    <param-value>classpath:config/log4j2.xml</param-value>
</context-param>

如果项目还是基于Servlet 2.x的,官方声明上Log4j2是不支持Servlet 3.0以下版本的,网上有教程称设置监听器和过滤器,这里给出其参考配置

<listener>
    <listener-class>org.apache.logging.log4j.web.Log4jServletFilter
</listener>
<filter>
    <filter-name>log4jServletFilter</filter-name>
    <filter-class>org.apache.logging.log4j.web.Log4jServletFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>log4jServletFilter</filter-name>
    <url-pattern>/*<url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
    <dispatcher>ERROR</dispatcher>
</filter-mapping>

设置配置文件

Log4j2支持properties,xml,json以及yaml。这里给出xml的参考配置

注意命名为log4j2.xml

<?xml version="1.0" encoding="utf-8" ?>
<Configuration status="off" monitorInterval="1800">
    <properties>
        <property name="LOG_HOME">F:\logs</property>
        <property name="ERROR_LOG_FILE_NAME">error</property>
    </properties>

    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d %-5p (%F:%L) - %m%n" />
        </Console>
        <RollingRandomAccessFile name="ErrorLog"
                                 fileName="${LOG_HOME}/${ERROR_LOG_FILE_NAME}.log"
                                 filePattern="${LOG_HOME}/${ERROR_LOG_FILE_NAME}.log.%d{yyyy-MM-dd}.gz">
            <PatternLayout pattern="%d %-5p (%F:%L) - %m%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy/>
                <SizeBasedTriggeringPolicy size="100MB"/>
            </Policies>
            <DefaultRolloverStrategy max="20"/>
        </RollingRandomAccessFile>
    </Appenders>

    <Loggers>
        <logger name="org.springframework.core" level="info"/>
        <logger name="org.springframework.beans" level="info"/>
        <logger name="org.springframework.context" level="info"/>
        <logger name="org.springframework.web" level="info"/>
        <logger name="org.newcih" level="error" includeLocation="true" additivity="false">
            <appender-ref ref="ErrorLog"/>
            <appender-ref ref="Console"/>
        </logger>

        <root level="info" includeLocation="true">
            <appender-ref ref="Console"/>
        </root>
    </Loggers>
</Configuration>

测试

一般的log4j代码正常使用即可,由于使用到slf4j,这里推荐了lombok,一款简化代码的插件,其实是一个jar包,eclipse和idea有各自的插件可以使用。给出代码如下

import lombok.extern.slf4j.Slf4j;
import org.newcih.teacher.service.TeacherService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Slf4j
@Controller
@RequestMapping("/teacher")
public class TeacherManager {
    @Autowired
    private TeacherService teacherService;

    @ResponseBody
    @RequestMapping(value = "/test")
    public String test(){
        log.info("hello world");
        log.error("Hello World");
        return "Success";
    }
}

在上述代码中,控制台和日志文件只会打印Hello World,这里因为在配置文件log4j2.xml中配置到这个包路径下的日志level是error,也就是只记录error级别的日志

教程结束,给出参考的优快云博客
使用Slf4j集成Log4j2构建项目日志系统的完美解决方案

2025.06.20【pacbio】|PB甲基化分析结果的统计与可视化介绍 本文介绍了PacBio甲基化数据的统计分析与可视化方法。主要内容包括:1) 分析甲基化位点分布、比例及染色体分布;2) 修饰基序(Motif)的统计与热图展示;3) 全基因组和局部区域测序深度可视化;4) 使用IGV查看单个reads修饰情况。文章提供了R代码示例,涵盖柱状图、分布图、热图等多种可视化形式,并建议了差异甲基化分析等进阶方法,帮助科研人员深入挖掘甲基化数据。 阅读详情

相关推荐

从零开始:用AutoLisp为AutoCAD定制专属工具栏(2023最新版)

本文详细介绍了如何利用AutoLisp语言为AutoCAD定制专属工具栏,以提升绘图效率。内容涵盖从环境配置、AutoLisp基础语法到实战开发的全过程,指导用户编写自动化脚本、封装功能函数,并最终通过CUI编辑器创建和部署个性化工具栏按钮,是2023年CAD用户实现工作流自动化与个性化的实用指南。

4k5l6j7h8的博客 299

用maven安装log4j 2

log4j 2分解为两部分,一部分是API(即log4j-api),一部分是具体实现(即log4j-core)。我们平时应用中使用是直接跟log4j-api这部分打交道

听海边涛声 2319

基于Simulink/Matlab的VSG并网系统单相接地与相间短路故障仿真建模与特性分析

本文详细介绍了基于Simulink/Matlab搭建虚拟同步发电机(VSG)并网系统仿真模型的方法,并重点分析了单相接地与相间短路故障下的系统特性。通过设置三相故障模块参数,模拟了故障发生时的电压、电流变化及VSG动态响应,为理解故障机理、优化控制策略及设计继电保护提供了仿真依据与实践指导。

t8u9v0w1x的博客 512

maven项目添加log4j2

1.在pom.xml中增加log4j2的依赖 <!-- log4j 新版本依赖--> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.10.0</version> </dependency>

橘子的博客 9590

第五节 Amesim《直动型溢流阀HCD建模》HCD5 学习资料

利用HCD原则创建直动型溢流阀的界面。这可能包括图形化表示直动型溢流阀的工作原理、操作方式和调节方法。这样的界面应当直观且易于理解,使用户能够轻松了解阀门的功能和使用方法。

m0_58052642的博客 1329

树莓派作为Modbus服务器:pymodbus配置全记录

手把手教你用树莓派部署Modbus服务器,核心基于pymodbus实现数据通信与设备控制,涵盖配置步骤与常见问题,适合工业自动化场景应用。

weixin_42510201的博客 753

Log4j2 + Slf4j + maven使用

Log4j2 + Slf4j + maven使用。

chiangho的博客 3141

GEOS-Chem笔记——模式下载安装+驱动数据+运行流程

看过我博客的会发现我写了很多CESM的笔记,但是说实话,平时科研我其实更多时候是GEOS-Chemuser。之所以写了很多CESM笔记,其实是因为不会,就边学边写。然后GEOS-Chem已经用比较熟了,所以也没想过做笔记啥的。但是我发现越来越多朋友私信我各种CESM问题,我觉得我可能给大家营造了一种我是CESM达人的错觉。感觉自己有点跑偏了呢。公平起见,我觉得我有必要补充点GEOS-Chem笔记。 GEOS-Chem是研究大气化学的人常用的大气化学传输模式,在全世界范围的大气化学研究组中被广泛使用。不过.

砍柴姑娘Jourosy的博客 1万+

maven+log4j2日志配置

maven+log4j2日志配置。

一个努力的小码农 1493

分位数回归和stata

分位数回归与stata 找了半天也没找到我想看的那种完整点的stata教程,只好自己写一个了… 参考教材:《用STATA学微观计量经济学》&《高级计量经济学及STATA应用_第2版》 第一部分 纯理论 更加详细的百度吧,很长很长,这里主要是拿来和ols比较。ols是均值回归,求解的方法是残差的平方最小,而这里就是对残差的绝对值用分位数做惩罚。(思想了解一下即可) 第二部分 Stata...

Joycezzz的博客 1万+

【毕业设计】基于雷达与深度学习的摔倒检测——雷达数据集的建立

运动物体的微多普勒效应为人体动作识别提供了可能,基于雷达的居家检测具有良好的隐私保护性,且不易受环境因素影响(如光照、温度等),近年来已受到国内外学者的广泛关注。基于雷达与深度学习的摔倒检测使用自建的雷达数据集进行人体摔倒检测的研究。雷达数据集的建立分为雷达数据采集和雷达数据处理两部分工作。

洋洋Young的博客 3402

log4j2的使用

log4j2的使用,日志分割

libing__123的博客 1964

手把手教你学Simulink--H桥逆变器的PWM控制设计与仿真

本文详细介绍了如何在Simulink环境中设计和仿真一个基于PWM控制的H桥逆变器。H桥逆变器广泛应用于电机驱动、UPS和可再生能源系统等领域,通过PWM技术可以有效控制输出电压的幅度和频率,减少谐波失真,提高系统效率和稳定性。文章首先介绍了所需的工具和环境,包括MATLAB/Simulink和SimscapeElectrical工具箱。接着,详细阐述了从定义任务需求、创建Simulink项目、建立基础电气模型、集成传感器模型、实现PWM控制算法到设置仿真参数和运行仿真的完整步骤。最后,文章总结了通过Sim

MHD0815的博客 716

SpringMVC使用Maven配置SLF4J和LOG4J2

本篇的重点在于LOG4J2,它与LOG4J 第一版区别很大。我将教程放在后面,将一些知识放在前面,所以想看教程的直接拉到后面即可。理论知识关于两版的区别两版的不同,直接的表现是在Maven仓库中log4j 表示第一版,org.apache.logging.log4j 表示第二版。另外应当注意:Log4J2.4及更高版本需要Java 7,版本2.0-alpha1至2.3需要Java 6XML配置已被...

NEWCIH的博客 4350

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Spring MVC + Slf4j + Log4j2 日志文件系统配置和log4j2配置文件log4j2.xml详解(转载)

转载自  吴赵笔记的“Spring MVC + Slf4j + Log4j2 日志文件系统配置”  博文地址:https://www.jianshu.com/p/191273d04d2d 阿豪聊干货的“聊一聊log4j2配置文件log4j2.xml” 博文地址:https://www.cnblogs.com/hafiz/p/6170702.html 一、各种日志系统介绍: Comm...

ashrashr的博客 1948

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

IDEA+Tomcat+SpringMVC项目如何使用自定义日志

背景: 在IDEA下使用Maven构建了一个Tomcat+SpringMVC的web项目,希望能够将自定义日志输出到控制台。但是在这个过程中使用JDK Logging发现输出到控制台的日志完全没有打印,控制台打印的只是tomcat的日志。此外也参考网上的配置尝试使用log4j2(没用log4j是因为我的Spring版本用的是5.X的)和slf4j,但都出现无法找到日志配置文件的情...

成天天的博客 928

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

POM文件

【代码】POM文件。

Soochow_yyx的博客 322

springmvc 整合 slf4j 和log4j2,不同日志级别分文件存储

一、各种日志系统介绍 1. Commons-logging Commons-logging也就是jcl,提供的是一个日志接口。自身提供一个简单的日志系统,但是一般是和其他日志系统组合使用。 如Commons-loggi+log4j。他会通过动态查找方式,在程序运行时自动找出真正使用的日志库。 2. slf4j slf4j是simple logging facade for java.和...

ghhgc的博客 1328

Log4j2切面AOP拦截exception

简介 实施 配置Maven依赖 添加log4j2配置文件 添加切面 xml方式配置切面 注解方式配置切面 添加

baixf的博客 2117

java后端环境mysql_前后端分离Java后端主流开发环境框架20200622

开发环境:IDE:IntelliJ IDEA 2017+DB:♦ mysql5.7.4、PostgreSQL、mongoDB、redisJDK:JDK1.8+♦Maven:Maven 3.2.3+技术框架:前后端分离、微服务等♦核心框架:spring boot 2.0.0、springcloud。♦持久层:mybatis 1.3.2(ibatis)。日志管理:log4j 2.10.0、SLF4j ...

weixin_28769141的博客 206

跟杨春娟学SpringMVC笔记:日志log4j2及slf4j的使用

跟杨春娟学SpringMVC笔记:日志log4j2及slf4j的使用 完成:第一遍 1.如何使用日志log4j2及slf4j? 步骤一:配置maven project BuildPath添加tomcat 修改JDK和web版本,maven update 添加spring-webmvc依赖 步骤二:Dependencies里add添加org.slf4j slf4j-api的依赖 <dependency> <groupId>org.slf4j</groupId&

ADbyCool的博客 533

SpringMVC-配置日志log4j.properties

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34050519的博客 1783

Log4j配置失效导致spring等框架一直打印DEBUG级别的日志

在应用中使用了SpringMVC+Hibernate+Log4j+SLF4J。Log4j的日志级别调到INFO。但是在web容器(Tomcat)在启动和运行的时候Spring,Hibernate等框架中DEBUG级别的日志不断狂刷,导致日志文件剧增,磁盘没几天就爆了。 针对这个问题在网上找了好多方法,都是没有效果或者治标不治本的。一直以为自己的Log4j配置文件写的有问题。后来在自己新搭建的pr

hoteam88的专栏 1万+

springmvc集成log4j与slf4j

springmvc配置log

学而时习之 1688

manven springmvc 项目中 slf4j 的配置使用(结合log4j 或者 logback)

前言:每个maven springmvc 都应该有日志功能,SLF4J(SimpleloggingfacadeforJava)就是一种日志规范,它提供了一个共通接口,可以适配多种不同的LOG实现,下面介绍一下在Maven项目中使用SLF4J。 结合log4j 在项目中首先应该在 pom.xml 中添加依赖 <!-- https://mvnrepository.co...

weixin_30439031的博客 679

slf4j 和 log4j的关系及合用Maven配置

最近因为项目实在是太忙,都没有时间学习。有时候会很矛盾,一方面是全心全意的想去快速做完项目,一方面又想学习点新东西。这样导致这两三个月都没有去学习一些新的东西,这周我开始创建自己的maven项目,因为公司的项目基本都是架构已经搭的很完善了,你很难去了解一个项目的架构,即使是很简单的。这都必须要自己亲手搭一个才会知道,关于如何搭建maven项目可以看看这篇文章 ...

weixin_30945039的博客 192
上一篇: Spring组件概述
下一篇: maven配置sqlserver驱动
newcih
博客等级 码龄11年 484粉丝 78原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

newcih

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值