log4j 巨大bug升级
Pom 配置修改:
剔除低版本的 log4j jar 包
<dependency> <artifactId>pwp-sysmng</artifactId> <groupId>com.todaytech.pwp</groupId> <version>${pwp.version}</version> <exclusions> <exclusion> <artifactId>standard</artifactId> <groupId>taglibs</groupId> </exclusion> <!--20211212 处理日志jar包漏洞 升级jar包--> <exclusion> <groupId>log4j</groupId> <artifactId>log4j</artifactId> </exclusion> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> </exclusion> </exclusions> </dependency>
增加高版本的jar包
<!--20211212 处理日志jar包漏洞 升级jar包--> <!--升级log4j 1.2.16 系列相关的jar包--> <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.15.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId> <version>2.15.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-1.2-api --> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-1.2-api</artifactId> <version>2.15.0</version> </dependency>
log4j2.properties 配置文件配置内容
status = error property.LOG_HOME=h:/output/logs property.BACKUP_HOME=backup property.SERVER_NAME=buddie-Service property.EVERY_FILE_SIZE=100M property.OUTPUT_LOG_LEVEL=INFO property.FILE_MAX=10 appender.console.type = Console appender.console.name = STDOUT appender.console.layout.type = PatternLayout
# 格式名 含义
# %c 输出日志信息所属的类的全名
# %d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyy-MM-dd HH:mm:ss },输出类似:2002-10-18- 22:10:28
# %f 输出日志信息所属的类的类名
# %F:输出日志消息产生时所在的文件名称。
# %l:输出日志事件的发生位置,相当于%c.%M(%F:%L)的组合,包括类全名、方法、文件名以及在代码中的行数。例如:test.TestLog4j.main(TestLog4j.java:10)。
# %L::输出代码中的行号。
# %m 输出代码中指定的信息,如log(message)中的message
# %M 输出打印该条日志的方法名
# %n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”
# %p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL。如果是调用debug()输出的,则为DEBUG,依此类推
# %r 输出自应用启动到输出该日志信息所耗费的毫秒数
# %t 输出产生该日志事件的线程名
# %x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
# %%:输出一个"%"字符。
# 另外,还可以在%与格式字符之间加上修饰符来控制其最小长度、最大长度、和文本的对齐方式。如:
# 1) c:指定输出category的名称,最小的长度是20,如果category的名称长度小于20的话,默认的情况下右对齐。
# 2)%-20c:"-"号表示左对齐。
# 3)%.30c:指定输出category的名称,最大的长度是30,如果category的名称长度大于30的话,就会将左边多出的字符截掉,但小于30的话也不会补空格。
appender.console.layout.pattern =%-d{yyyy-MM-dd HH,SSS} %p %C{1.} [%t] %m%n appender.console.layout.charset=GBK # 级别过滤(过滤日志记录) appender.console.filter.threshold.type = ThresholdFilter # 只记录debug级别以上的日志,大小写无关:(ALL<)TRACE<DEBUG<INFO<WARN<ERROR<FATAL(<OFF) appender.console.filter.threshold.level = DEBUG appender.rolling.type=RollingFile appender.rolling.name=RollingFileAll appender.rolling.filter.threshold.level = trace appender.rolling.filter.threshold.type = ThresholdFilter appender.rolling.fileName=${LOG_HOME}/dev_${SERVER_NAME}_all.log appender.rolling.filePattern=${LOG_HOME}/dev_${BACKUP_HOME}/dev_${SERVER_NAME}_all.%d{yyyy-MM-dd-HH}.log appender.rolling.layout.type=PatternLayout appender.rolling.layout.pattern=%d %p %C{1.} [%t] %m%n appender.rolling.policies.type=Policies appender.rolling.policies.time.type=TimeBasedTriggeringPolicy appender.rolling.policies.time.interval=2 appender.rolling.policies.time.modulate=true appender.rolling.policies.size.type=SizeBasedTriggeringPolicy appender.rolling.policies.size.size=${EVERY_FILE_SIZE} appender.rolling.strategy.type=DefaultRolloverStrategy appender.error.type=RollingFile appender.error.name=RollingFileError appender.error.filter.threshold.level = error appender.error.filter.threshold.type = ThresholdFilter appender.error.fileName=${LOG_HOME}/dev_${SERVER_NAME}_error.log appender.error.filePattern=${LOG_HOME}/dev_${BACKUP_HOME}/dev_${SERVER_NAME}_error.%d{yyyy-MM-dd-HH}.log appender.error.layout.type=PatternLayout appender.error.layout.pattern=%d %p %C{1.} [%t] %m%n appender.error.policies.type=Policies appender.error.policies.time.type=TimeBasedTriggeringPolicy appender.error.policies.time.interval=2 appender.error.policies.time.modulate=true appender.error.policies.size.type=SizeBasedTriggeringPolicy appender.error.policies.size.size=${EVERY_FILE_SIZE} appender.error.strategy.type=DefaultRolloverStrategy appender.charge.type=RollingFile appender.charge.name=RollingFileCharge appender.charge.filter.threshold.level = trace appender.charge.filter.threshold.type = ThresholdFilter appender.charge.fileName=${LOG_HOME}/dev_${SERVER_NAME}_charge.log appender.charge.filePattern=${LOG_HOME}/dev_${BACKUP_HOME}/dev_${SERVER_NAME}_charge.%d{yyyy-MM-dd-HH}.log appender.charge.layout.type=PatternLayout appender.charge.layout.pattern=%d %p %C{1.} [%t] %m%n appender.charge.policies.type=Policies appender.charge.policies.time.type=TimeBasedTriggeringPolicy appender.charge.policies.time.interval=2 appender.charge.policies.time.modulate=true appender.charge.policies.size.type=SizeBasedTriggeringPolicy appender.charge.policies.size.size=${EVERY_FILE_SIZE} appender.charge.strategy.type=DefaultRolloverStrategy logger.activity.name = buddie.activity logger.activity.level = debug logger.activity.additivity = false logger.activity.appenderRef.all.ref = RollingFileAll logger.activity.appenderRef.error.ref = RollingFileError logger.activity.appenderRef.stdout.ref = STDOUT logger.login.name = buddie.login logger.login.level = debug logger.login.additivity = false logger.login.appenderRef.all.ref = RollingFileAll logger.login.appenderRef.error.ref = RollingFileError logger.login.appenderRef.stdout.ref = STDOUT logger.charge.name = buddie.charge logger.charge.level = trace logger.charge.additivity = false logger.charge.appenderRef.all.ref = RollingFileAll logger.charge.appenderRef.error.ref = RollingFileError logger.charge.appenderRef.charge.ref = RollingFileCharge logger.charge.appenderRef.stdout.ref = STDOUT rootLogger.level = debug rootLogger.appenderRef.stdout.ref = STDOUT rootLogger.appenderRef.all.ref = RollingFileAll rootLogger.appenderRef.error.ref = RollingFileError
如何找出jar包的依赖来源(idea)
Maven 组件界面介绍
-
如上图标注 1 所示,为常用的 Maven 工具栏,其中最常用的有:
- 第一个按钮:
Reimport All Maven Projects
表示根据pom.xml
重新载入项目。一般单我们在pom.xml
添加了依赖包或是插件的时候,发现标注 4 的依赖区中没有看到最新写的依赖的话,可以尝试点击此按钮进行项目的重新载入。 - 第六个按钮:
Execute Maven Goal
弹出可执行的 Maven 命令的输入框。有些情况下我们需要通过书写某些执行命令来构建项目,就可以通过此按钮。 - 第九个按钮:
Show Dependencies
显示项目依赖的结构图,可以方便我们直观项目的依赖包情况。这个功能有些具体的操作下面会专门进行讲解。
- 第一个按钮:
-
如上图标注 2 所示,常用的 Maven 生命周期的命令,通过双击对应的命令来执行项目编译、打包、部署等操作。
-
如上图标注 3 所示,为我们在
pom.xml
中配置的插件列表,方便调用插件。 -
如上图标注 4 所示,为我们在
pom.xml
中配置的依赖包列表。 - 如上图标注 5 所示,为常见的 Java Web 在 Maven 下的一个项目结构。
大致了解过后,看怎么查看所有jar包的依赖关系。
2017.2.6版本之后,这个图标的样子变啦。
点完之后就会有下图
可以看到,这个maven项目的所有jar包依赖关系,一览无余。
为什么我的这个jar包依赖这么少呢,因为我这个项目只是简单示范了一下springmvc框架的使用。所以,也没有引入过多的jar包,要是在一个大一点的项目里面,你使用定时任务了,使用poi了使用等等一些其他工具类的包,那么就会很多了。
下面说一些小技巧
自动适配这个页面的大小。
右键,这个地方,如图,就可以调整到,适合大小。左上角那个放大镜边上,也有这个按钮。
不用自己去放大缩小的,找不到合适点。
这地方有个小技巧,也许有的人不知道呢,就是这有放大镜功能。不是简单的点上面给的图标,放大,那个放大也不方便不是?
Windows电脑可以按alt键,页面上就会出现个大的圆圈,也就是传说中的放大镜了,这么一来就可以看的方便一点了。
具体看图:
依赖包冲突
图中的红色实线就算是冲突的,可以入上图那样,右键,排除,他就自动在pom文件里面给exclud啦。
还有一种是虚线的红线。
这种虚线,告诉你同一个jar都在哪里被多次引用了。
上面的都是理论姿势,那么实际中怎么使用呢?
比如下面的这个pom.xml里面有这么2个dependency的引入。
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-webmvc</artifactId>
- <version>${org.springframework-version}</version>
- </dependency>
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-web</artifactId>
- <version>${org.springframework-version}</version>
- </dependency>
可以看到,如果你不是很了解spring相关的包依赖的话,你就不知道你上面的引入,其实只需要引入一个依赖就可以了。如下:
- <dependency>
- <groupId>org.springframework</groupId>
- <artifactId>spring-webmvc</artifactId>
- <version>${org.springframework-version}</version>
- </dependency>
因为,从上面的第一个依赖关系图可以看出来,spring-webmvc是依赖于spring-web的,所以,他是会自动的去添加这个jar包的。
额,其实,就算知道了,也不一定会去改,你也看到了,我们项目里面那么多红线,但是项目依然可以健康的跑起来。基本上算是尾大不掉的局面啦。这个要是一开始就注意这个问题的话,那么项目看起来还是比较 整洁的。
最后,湿胸我说的这么详细,各位观众,有钱的捧个钱场,没钱的捧个人场。点个赞,留个言啥的,好不好呀。
#log4j2.properties#用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,会看到log4j2内部各种详细输出#(ALL<)TRACE<DEBUG<INFO<WARN<ERROR<FATAL(<OFF)status = debugdest = errname = PropertiesConfig
#日志文件名称 指定日志文件的位置和文件名称,以便记录多份日志时,直接引用#property.filename = d:/logs/rollingtest.logproperty.filename = h:/zhpfds_logs/DEBUG.log#%n-换行#%m-日志内容#%p-日志级别(FATAL,ERROR,WARN...)#%F-java源文件名#%t 输出产生该日志事件的线程名#%d 输出日志时间点的日期或时间#%L-java源码行数#%C-java类名#%M-java方法名#%l-输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数property.layoutPattern = %-d{yyyy-MM-dd HH,SSS} %p %C{1.} [%t] %m%n
# 级别过滤(过滤日志记录)filter.threshold.type = ThresholdFilter# 只记录debug级别以上的日志,大小写无关:(ALL<)TRACE<DEBUG<INFO<WARN<ERROR<FATAL(<OFF)filter.threshold.level = debug
# 控制台类型的日志输出源appender.console.type = Console# 输出源的名称appender.console.name = STDOUT#输出类型appender.console.target = SYSTEM_OUT# 输出布局类型appender.console.layout.type = PatternLayout# 输出模板appender.console.layout.pattern = ${layoutPattern}# 级别过滤(过滤日志记录)appender.console.filter.threshold.type = ThresholdFilter# 只记录debug级别以上的日志,大小写无关:(ALL<)TRACE<DEBUG<INFO<WARN<ERROR<FATAL(<OFF)appender.console.filter.threshold.level = DEBUG
# 文件日志输出源:文件滚动记录类型的日志输出源appender.rolling.type = RollingFile#输入源名称 指定当前滚动输出源的名称appender.rolling.name = RollingFile#日志文件名:指定当前日志文件的位置和文件名称,可以单独指定,也可以直接引用之前定义过得property.filename参数appender.rolling.fileName = ${filename}#指定当发生文件滚动时,文件重命名规则 :指定当发生Rolling时,文件的转移和重命名规则appender.rolling.filePattern = h:/zhpfds_logs/DEBUG-%d{MM-dd-yy-HH-mm-ss}-%i.log.gz# 滚动记录输出源布局类型appender.rolling.layout.type = PatternLayout# 滚动记录输出模板 %-d{yyyy-MM-dd HH:mm:ss,SSS} %p %C{1.} [%t] %m%nappender.rolling.layout.pattern = ${layoutPattern}# 指定记录文件的保存策略,该策略主要是完成周期性的日志文件保存工作:appender.rolling.policies.type = Policies# 基于时间的触发策略(TriggeringPolicy)appender.rolling.policies.time.type = TimeBasedTriggeringPolicy# 当前记录周期为每2秒生成一个文件,如果filePattern中配置的文件重命名规则是test1-%d{yyyy-MM-dd HH-mm}-%i,#最小的时间粒度是mm,即分钟,TimeBasedTriggeringPolicy指定的size是1,结合起来就是每2分钟生成一个新文件。#如果改成%d{yyyy-MM-dd HH},最小粒度为小时,则每2个小时生成一个文件。appender.rolling.policies.time.interval = 2# 是否对保存时间进行限制。若modulate=true,则保存时间将以0点为边界进行偏移计算。#比如,modulate=true,interval=4hours,#那么假设上次保存日志的时间为03:00,则下次保存日志的时间为04:00,之后的保存时间依次为08:00,12:00,16:00appender.rolling.policies.time.modulate = true# 基于日志文件大小的触发策略appender.rolling.policies.size.type = SizeBasedTriggeringPolicy# 当日志文件大小大于size指定的值时,触发滚动appender.rolling.policies.size.size=100MB# 文件保存的覆盖策略(RolloverStrategy)appender.rolling.strategy.type = DefaultRolloverStrategy# 生成分割(保存)文件的个数,默认为5(-1,-2,-3,-4,-5)appender.rolling.strategy.max = 5appender.rolling.filter.threshold.type=ThresholdFilterappender.rolling.filter.threshold.level=DEBUG
# 记录器名称 com.example.my.applogger.rolling.name = com.video.demo# 设置日志级别logger.rolling.level = debug# 是否向上级logger传递信息logger.rolling.additivity = true
# 关联名称为RollingFile的输出源(appender)logger.rolling.appenderRef.rolling.ref = RollingFile
#设置SpringFramework框架的日志级别,一般业务上不需要其它使用了log4j的框架输出日志logger.SpringFramework.name = org.springframeworklogger.SpringFramework.level = INFO
#当有其它框架的也使用了log4j时,会输出相应日志,以下方式为屏蔽其它框架的日志信息(设置日志级别)#logger.Http.name = org.apache.http#logger.Http.level = TRACE
# 根记录器,所有记录器的父辈rootLogger.level = debug
# 关联名称为STDOUT的输出源(appender)rootLogger.appenderRef.stdout.ref = STDOUT
学问:纸上得来终觉浅,绝知此事要躬行
为事:工欲善其事,必先利其器。
态度:道阻且长,行则将至;行而不辍,未来可期
.....................................................................
------- 桃之夭夭,灼灼其华。之子于归,宜其室家。 ---------------
------- 桃之夭夭,有蕡其实。之子于归,宜其家室。 ---------------
------- 桃之夭夭,其叶蓁蓁。之子于归,宜其家人。 ---------------
=====================================================================
* 博客文章部分截图及内容来自于学习的书本及相应培训课程以及网络其他博客,仅做学习讨论之用,不做商业用途。
* 如有侵权,马上联系我,我立马删除对应链接。 * @author Alan -liu * @Email no008@foxmail.com
转载请标注出处! ✧*꧁一品堂.技术学习笔记꧂*✧. ---> https://www.cnblogs.com/ios9/