log4j2 pom(springmvc怎么配置log4j2)
本文目录
springmvc怎么配置log4j2
增加pom配置,让maven加载log4j包《!-- log4j --》 《dependency》 《groupId》org.slf4j《/groupId》 《artifactId》slf4j-log4j12《/artifactId》 《version》1.7.2《/version》 《/dependency》修改web.xml,把log4j加到项目中《!-- Log4j配置 --》 《context-param》 《param-name》log4jConfigLocation《/param-name》 《param-value》classpath:/log4j/log4j.xml《/param-value》 《/context-param》 《!-- 加载log4j配置文件 --》 《listener》 《listener-class》org.springframework.web.util.Log4jConfigListener《/listener-class》 《/listener》根据web.xml配置的路径,在src/main/resource目录下新建log4j/log4j.xml《?xml version="1.0" encoding="UTF-8" ?》 《!DOCTYPE log4j:configuration SYSTEM "log4j.dtd"》 《log4j:configuration 《appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender"》 《layout class="org.apache.log4j.PatternLayout"》 《param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss:SSS} %l %m%n" /》 《/layout》 《!--限制输出级别 --》 《filter class="org.apache.log4j.varia.LevelRangeFilter"》 《param name="LevelMax" value="ERROR" /》 《param name="LevelMin" value="DEBUG" /》 《/filter》 《/appender》 《root》 《priority value="debug" /》 《appender-ref ref="CONSOLE" /》 《/root》 《/log4j:configuration》经过上面的步骤后,log4j就配置好了,接下来是使用,在DemoController中使用,使用slf4j接口,代替log4j,这样假如以后不用log4j了,用logback等其它日志框架,只需修改配置文件,不需要修改java代码package com.my1.controller;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.servlet.ModelAndView;@Controllerpublic class DemoController { private static Logger logger = LoggerFactory.getLogger(DemoController.class); @RequestMapping(value = "/toPage1.htm") public ModelAndView toPage1() { logger.debug("TEST"); return new ModelAndView("page1"); }}由于用了springmvc框架,日志配置好后,会输出很多spring日志,在log4j.xml中,增加一段配置,修改spring包的日志输出级别 《!-- 通过《category》《/category》的定义可以将各个包中的类日志输出到不同的日志文件中 --》 《category name="org.springframework"》 《priority value="error" /》 《appender-ref ref="CONSOLE" /》 《/category》log4j的自定义输出格式说明《!-- %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL --》 《!-- %r 输出自应用启动到输出该log信息耗费的毫秒数 --》 《!-- %c 输出所属的类目,通常就是所在类的全名 --》 《!-- %t 输出产生该日志事件的线程名 --》 《!-- %n 输出一个回车换行符,Windows平台为“/r/n”,Unix平台为“/n” --》 《!-- %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921 --》 《!-- %l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:Testlog4.main(TestLog4.java:10) --》log4j的输出方式说明《!-- Log4j提供的appender有以下几种: --》 《!-- org.apache.log4j.ConsoleAppender(控制台), --》 《!-- org.apache.log4j.FileAppender(文件), --》 《!-- org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件), --》 《!-- org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件), --》 《!-- org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方) --》
SpringBoot使用log4j2的POM依赖顺序要求
POM使用《exclusions》标签排除多个依赖包的同一个依赖时,需要注意pom依赖的顺序问题(当然也可以每个都进行排除)。
以下为SpringBoot相关的依赖:
运行后控制台结果如下:
当我调整了pom中Spring的依赖顺序后如下(其余保持完全不变):
再次启动应用时,控制台打印如下:
现象 :经过依赖分析,确实日志冲突了( spring-boot-starter-jdbc 、 spring-boot-starter-thymeleaf ) 疑问 :难道pom的依赖还有顺序的要求?
经过反复验证,发现当MAVEN使用《exclusions》标签时,需要在依赖的第一个包进行排除,如下:
pom.xml文件中的Scope标签
我们在Maven项目,pom.xml文件中经常会碰到scope这个标签,有些同学搞不清楚这个scope对依赖的jar包有什么用。 在回答这个问题之前,我先简单的阐述一下java程序运行的阶段: 源码 =》 编译 =》 测试 =》 运行 =》 打包 =》 部署 上述程序中同学们应该都可以看的懂,编写一个servlet 打印 hello world。 1.IDE在编译阶段按照pom.xml中的依赖关系会去查找log4j servlet的二方包,如果找不到就会出现错误 2.在测试某个函数会调用junit 二方包 3.运行阶段 4.打包的时候,pom.xml会告诉maven,哪些jar不需要打进去 所以它的pom.xml应该是这样的 总结:我们平常最大的scope疑问在provided 和 runtime之间。记住一个原则就行,如果容器有的jar,在项目pom.xml中就使用provided; 如果需要动态加载的jar就使用runtime 。默认scope是compile ***隐藏网址******隐藏网址******隐藏网址******隐藏网址***
log4j 漏洞 怎么查
最直观方式
1、使用pom分析插件,如IDEA上的Dependency Analyzer,打开pom文件后,切换到Dependency Analyzer标签,查看log4j-core的版本号;
2、查看lib下jar包的版本
以上方法需要每个项目都打开去验证,虽然直观,但是麻烦;于是想到用以下方法,先去服务器上排查,然后再根据结果,打开需要的项目进行修复。
服务器上排查
1、直接查看jar包或war包内的第三方库。
2、解压后的war项目目录或者lib单独打包放在项目外边的。
3、打包到项目中的三方引用包是class而不是jar包。
本文相关文章:
phpstorm配置xdebug(如何在xampp环境下配置phpstrom xdebug)
2024年9月10日 02:30
oracle11g 数据库创建失败(oracle 11g_r2 创建数据库时 Enterprise Manager 配置失败)
2024年9月6日 19:50
centos7网卡配置(centos 7虚拟机怎么配置网卡eno 16)
2024年8月31日 12:35
xml常用标签(web.xml文件主要配置有哪些,都有什么含义)
2024年8月26日 11:20
feignclient(Feign Client超时时间配置以及单独给某接口设置超时时间方法记录)
2024年8月20日 09:55
hibernate二级缓存有什么用(如果不配置hibernate的二级缓存的话,是不是就体现不出hibernate的优越性)
2024年8月16日 14:55
vscode配置python(mac下VScode怎么配置编译Python)
2024年8月11日 06:07
java获取项目中的文件(java文件怎么获取项目下的配置文件)
2024年8月9日 18:30
centos java环境配置(如何在阿里云Centos7.0上配置java web环境)
2024年8月5日 22:10
超详细tomcat安装及配置教程(apache_tomcat_7.0.69怎样安装及配置)
2024年8月5日 04:15
vmware开100个虚拟机(我电脑要开100个虚拟机电脑需要什么样的配置)
2024年8月5日 03:25
web服务器的配置(ASP.NET开发宝典:配置Web服务器(IIS)虚拟站点)
2024年8月4日 12:35
apache一键安装(怎样在windows下配置apache vhost)
2024年8月3日 20:50
qt creator怎么配置vs2013编译器?跪求啊!STM32编译开发板串口例程,总是出现错误
2024年8月3日 20:26
cmakelist语法(怎样编写Cmake的配置文件Cmakelist.txt)
2024年8月2日 15:46
pycharm使用教程unittest(一、unittest通过main()方法运行的配置)
2024年7月27日 23:55
console线驱动(笔记本没有console口想连线配置交换机和路由怎么办)
2024年7月27日 20:25
更多文章:
decades是什么意思(In recent decades是什么意思)
2024年7月3日 06:03
微服务架构和微信小程序的区别(微信小程序和订阅号,服务号有什么区别)
2024年7月21日 03:27
c socket send(c++ socket变成 客户端第二个send 服务端没反应)
2024年7月1日 01:14
protective怎么读(protective是什么意思)
2024年6月18日 13:58
keys什么意思(KEYS=Keep Empowering Yourself Successfully.是什么意思)
2023年5月29日 02:40
简述mvc架构的流程(spring mvc 的工作流程是什么)
2024年7月17日 19:11
switch是循环语句吗(在switch结构体内也可以使用continue这句话对么)
2024年7月21日 02:46
上海java架构师培训哪家好?现在Java进阶培训量产java架构师是否是件好事
2024年5月7日 21:43
安卓编码转换工具(最好的视频编码转换(视频压缩)软件有哪些)
2024年5月17日 22:42
be trapped in什么意思(be trapped in是什么意思)
2024年9月7日 07:10
div padding(div中间距用padding好还是margin好)
2024年7月31日 04:35