/**PageBeginHtml Block Begin **/ /***自定义返回顶部小火箭***/ /*生成博客目录的JS 开始*/ /*生成博客目录的JS 结束*/

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的引入。

[html]  view plain  copy
 
 
 
  1. <dependency>  
  2.     <groupId>org.springframework</groupId>  
  3.     <artifactId>spring-webmvc</artifactId>  
  4.     <version>${org.springframework-version}</version>  
  5. </dependency>  
  6. <dependency>  
  7.     <groupId>org.springframework</groupId>  
  8.     <artifactId>spring-web</artifactId>  
  9.     <version>${org.springframework-version}</version>  
  10. </dependency>  

可以看到,如果你不是很了解spring相关的包依赖的话,你就不知道你上面的引入,其实只需要引入一个依赖就可以了。如下:

 

 

[html]  view plain  copy
 
 
 
  1. <dependency>  
  2.     <groupId>org.springframework</groupId>  
  3.     <artifactId>spring-webmvc</artifactId>  
  4.     <version>${org.springframework-version}</version>  
  5. </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

posted @ 2021-12-12 23:53  一品堂.技术学习笔记  阅读(1025)  评论(0编辑  收藏  举报