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