精华内容
下载资源
问答
  • LOG4J
    千次阅读
    2022-02-07 16:35:46

    一、 Log4j简介

    Log4j有三个主要的组件:

    Loggers(记录器):日志类别和级别;
    Appenders (输出源):日志要输出的地方;
    Layouts(布局):日志以何种形式输出

    1.1 Loggers

    Loggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,分别用来指定这条日志信息的重要程度,明白这一点很重要,Log4j有一个规则:只输出级别不低于设定级别的日志信息,假设Loggers级别设定为INFO,则INFO、WARN、ERROR和FATAL级别的日志信息都会输出,而级别比INFO低的DEBUG则不会输出。

    1.2 Appenders

    禁用和使用日志请求只是Log4j的基本功能,Log4j日志系统还提供许多强大的功能,比如允许把日志输出到不同的地方,如控制台(Console)、文件(Files)等,可以根据天数或者文件大小产生新的文件,可以以流的形式发送到其它地方等等。
    常使用的类如下:

    org.apache.log4j.ConsoleAppender(控制台)
    org.apache.log4j.FileAppender(文件)
    org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
    org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
    org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
    

    配置模式:

    log4j.appender.appenderName = className
    log4j.appender.appenderName.Option1 = value1
    …
    log4j.appender.appenderName.OptionN = valueN
    

    1.3 Layouts

    Log4j可以在Appenders的后面附加Layouts来完成这个功能。
    Layouts提供四种日志输出样式,如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式。
    常使用的类如下:

    org.apache.log4j.HTMLLayout(以HTML表格形式布局)
    org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
    org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
    org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等信息)
    

    配置模式:

    log4j.appender.appenderName.layout =className
    log4j.appender.appenderName.layout.Option1 = value1
    ...
    log4j.appender.appenderName.layout.OptionN = valueN
    

    二、配置详解

    在实际应用中,要使Log4j在系统中运行须事先设定配置文件。配置文件事实上也就是对Logger、Appender及Layout进行相应设定。
    Log4j支持两种配置文件格式:

    一种是XML格式的文件,
    一种是properties属性文件。
    下面以properties属性文件为例介绍log4j.properties的配置。

    2.1 配置根Logger:

    log4j.rootLogger = [ level ] , appenderName1, appenderName2, …
    log4j.additivity.org.apache=false:表示Logger不会在父Logger的appender里输出,默认为true
    1. level :设定日志记录的最低级别,可设的值有OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别,Log4j建议只使用中间四个级别。通过在这里设定级别,您可以控制应用程序中相应级别的日志信息的开关,比如在这里设定了INFO级别,则应用程序中所有DEBUG级别的日志信息将不会被打印出来。
    2. appenderName:就是指定日志信息要输出到哪里。可以同时指定多个输出目的地,用逗号隔开。
      例如:log4j.rootLogger=INFO,A1,B2,C3

    2.2 配置日志信息输出目的地(appender)

    log4j.appender.appenderName = className
    appenderName:自定义appderName,在log4j.rootLogger设置中使用;
    className:可设值如下:

    org.apache.log4j.ConsoleAppender(控制台)
    org.apache.log4j.FileAppender(文件)
    org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件)
    org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)
    org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)
    
    1. ConsoleAppender选项
      Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
      ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
      Target=System.err:默认值是System.out。
    2. FileAppender选项
      Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
      ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
      Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。
      File=D:/logs/logging.log4j:指定消息输出到logging.log4j文件中。
    3. DailyRollingFileAppender选项
      Threshold=WARN #指定日志信息的最低输出级别,默认为DEBUG。 ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
      Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。
      File=D:/logs/logging.log4j:指定当前消息输出到logging.log4j文件中。
      DatePattern=’.'yyyy-MM:每月滚动一次日志文件,即每月产生一个新的日志文件。当前月的日志文件名为logging.log4j,前一个月的日志文件名为logging.log4j.yyyy-MM。
      另外,也可以指定按周、天、时、分等来滚动日志文件,对应的格式如下:
      '.'yyyy-MM:每月
      '.'yyyy-ww:每周
      '.'yyyy-MM-dd:每天
      '.'yyyy-MM-dd-a:每天两次
      '.'yyyy-MM-dd-HH:每小时
      '.'yyyy-MM-dd-HH-mm:每分钟
    4. RollingFileAppender选项
      Threshold=WARN:指定日志信息的最低输出级别,默认为DEBUG。
      ImmediateFlush=true:表示所有消息都会被立即输出,设为false则不输出,默认值是true。
      Append=false:true表示消息增加到指定文件中,false则将消息覆盖指定的文件内容,默认值是true。
      File=D:/logs/logging.log4j:指定消息输出到logging.log4j文件中。
      MaxFileSize=100KB:后缀可以是KB, MB 或者GB。在日志文件到达该大小时,将会自动滚动,即将原来的内容移到logging.log4j.1文件中。
      MaxBackupIndex=2:指定可以产生的滚动文件的最大数,例如,设为2则可以产生logging.log4j.1,logging.log4j.2两个滚动文件和一个logging.log4j文件。

    2.3 配置日志信息的输出格式(Layout)

    log4j.appender.appenderName.layout=className
    className:可设值如下:

    org.apache.log4j.HTMLLayout(以HTML表格形式布局)
    org.apache.log4j.PatternLayout(可以灵活地指定布局模式)
    org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串)
    org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)
    
    1. HTMLLayout选项
      LocationInfo=true:输出java文件名称和行号,默认值是false。
      Title=My Logging: 默认值是Log4J Log Messages。
    2. PatternLayout选项:
      ConversionPattern=%m%n:设定以怎样的格式显示消息。
      格式化符号说明:
      %p:输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL。
      %d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。
      %r:输出自应用程序启动到输出该log信息耗费的毫秒数。
      %t:输出产生该日志事件的线程名。
      %l:输出日志事件的发生位置,相当于%c.%M(%F:%L)的组合,包括类全名、方法、文件名以及在代码中的行数。例如:test.TestLog4j.main(TestLog4j.java:10)。
      %c:输出日志信息所属的类目,通常就是所在类的全名。
      %M:输出产生日志信息的方法名。
      %F:输出日志消息产生时所在的文件名称。
      %L::输出代码中的行号。
      %m::输出代码中指定的具体日志信息。
      %n:输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"。
      %x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像java servlets这样的多客户多线程的应用中。
      %%:输出一个"%“字符。
      另外,还可以在%与格式字符之间加上修饰符来控制其最小长度、最大长度、和文本的对齐方式。如:
      c:指定输出category的名称,最小的长度是20,如果category的名称长度小于20的话,默认的情况下右对齐。
      2)%-20c:”-"号表示左对齐。
      3)%.30c:指定输出category的名称,最大的长度是30,如果category的名称长度大于30的话,就会将左边多出的字符截掉,但小于30的话也不会补空格。

    Log4j比较全面的配置

    Log4j配置文件实现了输出到控制台、文件、回滚文件、发送日志邮件、输出到数据库日志表、自定义标签等全套功能。

    log4j.rootLogger=DEBUG,console,dailyFile,im
    log4j.additivity.org.apache=true
    
    # 控制台(console)
    log4j.appender.console=org.apache.log4j.ConsoleAppender
    log4j.appender.console.Threshold=DEBUG
    log4j.appender.console.ImmediateFlush=true
    log4j.appender.console.Target=System.err
    log4j.appender.console.layout=org.apache.log4j.PatternLayout
    log4j.appender.console.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
    # 日志文件(logFile)
    log4j.appender.logFile=org.apache.log4j.FileAppender
    log4j.appender.logFile.Threshold=DEBUG
    log4j.appender.logFile.ImmediateFlush=true
    log4j.appender.logFile.Append=true
    log4j.appender.logFile.File=D:/logs/log.log4j
    log4j.appender.logFile.layout=org.apache.log4j.PatternLayout
    log4j.appender.logFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
    # 回滚文件(rollingFile)
    log4j.appender.rollingFile=org.apache.log4j.RollingFileAppender
    log4j.appender.rollingFile.Threshold=DEBUG
    log4j.appender.rollingFile.ImmediateFlush=true
    log4j.appender.rollingFile.Append=true
    log4j.appender.rollingFile.File=D:/logs/log.log4j
    log4j.appender.rollingFile.MaxFileSize=200KB
    log4j.appender.rollingFile.MaxBackupIndex=50
    log4j.appender.rollingFile.layout=org.apache.log4j.PatternLayout
    log4j.appender.rollingFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
    # 定期回滚日志文件(dailyFile)
    log4j.appender.dailyFile=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.dailyFile.Threshold=DEBUG
    log4j.appender.dailyFile.ImmediateFlush=true
    log4j.appender.dailyFile.Append=true
    log4j.appender.dailyFile.File=D:/logs/log.log4j
    log4j.appender.dailyFile.DatePattern='.'yyyy-MM-dd
    log4j.appender.dailyFile.layout=org.apache.log4j.PatternLayout
    log4j.appender.dailyFile.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
    # 应用于socket
    log4j.appender.socket=org.apache.log4j.RollingFileAppender
    log4j.appender.socket.RemoteHost=localhost
    log4j.appender.socket.Port=5001
    log4j.appender.socket.LocationInfo=true
    # Set up for Log Factor 5
    log4j.appender.socket.layout=org.apache.log4j.PatternLayout
    log4j.appender.socket.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
    # Log Factor 5 Appender
    log4j.appender.LF5_APPENDER=org.apache.log4j.lf5.LF5Appender
    log4j.appender.LF5_APPENDER.MaxNumberOfRecords=2000
    # 发送日志到指定邮件
    log4j.appender.mail=org.apache.log4j.net.SMTPAppender
    log4j.appender.mail.Threshold=FATAL
    log4j.appender.mail.BufferSize=10
    log4j.appender.mail.From = xxx@mail.com
    log4j.appender.mail.SMTPHost=mail.com
    log4j.appender.mail.Subject=Log4J Message
    log4j.appender.mail.To= xxx@mail.com
    log4j.appender.mail.layout=org.apache.log4j.PatternLayout
    log4j.appender.mail.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
    # 应用于数据库
    log4j.appender.database=org.apache.log4j.jdbc.JDBCAppender
    log4j.appender.database.URL=jdbc:mysql://localhost:3306/test
    log4j.appender.database.driver=com.mysql.jdbc.Driver
    log4j.appender.database.user=root
    log4j.appender.database.password=
    log4j.appender.database.sql=INSERT INTO LOG4J (Message) VALUES('=[%-5p] %d(%r) --> [%t] %l: %m %x %n')
    log4j.appender.database.layout=org.apache.log4j.PatternLayout
    log4j.appender.database.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
    
    # 自定义Appender
    log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender
    log4j.appender.im.host = mail.cybercorlin.net
    log4j.appender.im.username = username
    log4j.appender.im.password = password
    log4j.appender.im.recipient = corlin@cybercorlin.net
    log4j.appender.im.layout=org.apache.log4j.PatternLayout
    log4j.appender.im.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n
    

    输出独立日志文件

    log4j的强大功能无可置疑,但实际应用中免不了遇到某个功能需要输出独立的日志文件的情况,怎样才能把所需的内容从原有日志中分离,形成单独的日志文件呢?其实只要在现有的log4j基础上稍加配置即可轻松实现这一功能。

    常见
    先看一个常见的log4j.properties文件,它是在控制台和myweb.log文件中记录日志:

    log4j.rootLogger=DEBUG, stdout, logfile
     
    log4j.category.org.springframework=ERROR
    log4j.category.org.apache=INFO
     
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
     
    log4j.appender.logfile=org.apache.log4j.RollingFileAppender
    log4j.appender.logfile.File=${myweb.root}/WEB-INF/log/myweb.log
    log4j.appender.logfile.MaxFileSize=512KB
    log4j.appender.logfile.MaxBackupIndex=5
    log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
    log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n
    
    

    不同类输出不同文件
    如果想对不同的类输出不同的文件(以cn.com.Test为例),先要在Test.java中定义:

    private static Log logger = LogFactory.getLog(Test.class);
    

    然后在log4j.properties中加入:

    log4j.logger.cn.com.Test= DEBUG, test
    log4j.appender.test=org.apache.log4j.FileAppender
    log4j.appender.test.File=${myweb.root}/WEB-INF/log/test.log
    log4j.appender.test.layout=org.apache.log4j.PatternLayout
    log4j.appender.test.layout.ConversionPattern=%d %p [%c] - %m%n
    
    

    也就是让cn.com.Test中的logger使用log4j.appender.test所做的配置。
    同一类输出多个日志文件
    但是,如果在同一类中需要输出多个日志文件呢?其实道理是一样的,先在Test.java中定义:

    private static Log logger1 = LogFactory.getLog("myTest1");
    private static Log logger2 = LogFactory.getLog("myTest2");
    
    

    然后在log4j.properties中加入:

    log4j.logger.myTest1= DEBUG, test1
    log4j.appender.test1=org.apache.log4j.FileAppender
    log4j.appender.test1.File=${myweb.root}/WEB-INF/log/test1.log
    log4j.appender.test1.layout=org.apache.log4j.PatternLayout
    log4j.appender.test1.layout.ConversionPattern=%d %p [%c] - %m%n
      
    log4j.logger.myTest2= DEBUG, test2
    log4j.appender.test2=org.apache.log4j.FileAppender
    log4j.appender.test2.File=${myweb.root}/WEB-INF/log/test2.log
    log4j.appender.test2.layout=org.apache.log4j.PatternLayout
    log4j.appender.test2.layout.ConversionPattern=%d %p [%c] - %m%n
    

    也就是在用logger时给它一个自定义的名字(如这里的"myTest1"),然后在log4j.properties中做出相应配置即可。别忘了不同日志要使用不同的logger(如输出到test1.log的要用logger1.info(“abc”))。

    还有一个问题,就是这些自定义的日志默认是同时输出到log4j.rootLogger所配置的日志中的,如何能只让它们输出到自己指定的日志中呢?别急,这里有个开关:

    log4j.additivity.myTest1 = false
    

    它用来设置是否同时输出到log4j.rootLogger所配置的日志中,设为false就不会输出到其它地方啦!注意这里的"myTest1"是你在程序中给logger起的那个自定义的名字!
    如果你说,我只是不想同时输出这个日志到log4j.rootLogger所配置的logfile中,stdout里我还想同时输出呢!那也好办,把你的

    log4j.logger.myTest1 = DEBUG, test1改为下式就OK啦!
    log4j.logger.myTest1=DEBUG, stdout,  test1
    

    转自链接: https://www.jianshu.com/p/ccafda45bcea

    更多相关内容
  • log4j-2.7api+core包

    热门讨论 2017-03-21 10:31:21
    针对struts2漏洞,特上传log4j-core-2.7.jar和log4j-api-2.7.jar等必备工具包,同时将log4j2.xml添加到项目中,否则会有异常。
  • 每天生成一个log4j日志文件,如果只需要将最近一段时间内的日志文件保留,以前或更早的文件不用保留。例如只保留最近一周的日志,日志文件保留3天等等这些。。。通过这个jar包就可以实现。 log4j.properties文件在...
  • log4j2相关jar包

    2016-09-20 15:02:13
    log4j2相关核心jar包,用于日志文件。大家有需要的可以下载。对于打印日志有需要的人,可以放心下载
  • log4j所需的jar包

    热门讨论 2016-07-06 15:29:16
    log4j所需的jar包commons-logging.jar和log4j-1.2.17.jar 日志你会用得到的。
  • log4j2漏洞升级

    千次阅读 2021-12-17 16:42:43
    Apache Log4j 2.x <= 2.15.0-rc1 二、可能受影响的应用不限于以下内容: Spring-Boot-strater-log4j2 Apache Struts2 Apache Solr Apache Druid Apache Flink ElasticSearch Flume Dubbo Jedis ...

    一、影响范围:

    Apache Log4j 2.x <= 2.15.0-rc1

    二、可能受影响的应用不限于以下内容:

    Spring-Boot-strater-log4j2

    Apache Struts2

    Apache Solr

    Apache Druid

    Apache Flink

    ElasticSearch

    Flume

    Dubbo

    Jedis

    Logstash

    Kafka

    Apache Storm

    三、解决办法:

    1、等待官方升级 log4j2 版本。

    2、自己升级 log4j2 版本至 >= 2.15.0,目前最新 2.16.0

    四、部分组件实施步骤:

    1、logstash

    1.1、从 官网 下载新版 6.8.21 or 7.16.1,修复此问题。

    1.2、自己升级  log4j2 版本

    查找漏洞包

    find / -name "log4j-api*.jar"
    find / -name "log4j-api*.jar"

    根据包名替换为下载的新包

    [logstash核心类库更新]
    mv /opt/logstash/logstash-core/lib/jars/log4j-api-2.9.1.jar /opt/logstash/logstash-core/lib/jars/log4j-api-2.9.1.jar.bak
    mv /opt/logstash/logstash-core/lib/jars/log4j-core-2.9.1.jar /opt/logstash/logstash-core/lib/jars/log4j-core-2.9.1.jar.bak
    mv /opt/logstash/logstash-core/lib/jars/log4j-slf4j-impl-2.9.1.jar /opt/logstash/logstash-core/lib/jars/log4j-slf4j-impl-2.9.1.jar.bak
    cp /home/log4j/log4j-api-2.15.0.jar /opt/logstash/logstash-core/lib/jars/
    cp /home/log4j/log4j-core-2.15.0.jar /opt/logstash/logstash-core/lib/jars/
    cp /home/log4j/log4j-slf4j-impl-2.15.0.jar /opt/logstash/logstash-core/lib/jars/


    [logstash插件更新]
    -- logstash-input-kafka-8.0.6 修改运行类库
    mv /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-input-kafka-8.0.6/vendor/jar-dependencies/runtime-jars/log4j-api-2.8.2.jar /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-input-kafka-8.0.6/vendor/jar-dependencies/runtime-jars/log4j-api-2.8.2.jar.bak
    mv /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-input-kafka-8.0.6/vendor/jar-dependencies/runtime-jars/log4j-slf4j-impl-2.8.2.jar /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-input-kafka-8.0.6/vendor/jar-dependencies/runtime-jars/log4j-slf4j-impl-2.8.2.jar.bak
    cp /home/log4j/log4j-api-2.15.0.jar /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-input-kafka-8.0.6/vendor/jar-dependencies/runtime-jars/
    cp /home/log4j/log4j-slf4j-impl-2.15.0.jar /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-input-kafka-8.0.6/vendor/jar-dependencies/runtime-jars/

    -- logstash-input-kafka-8.0.6 修改依赖
    mv /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-input-kafka-8.0.6/lib/org/apache/logging/log4j/log4j-api/2.8.2/log4j-api-2.8.2.jar /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-input-kafka-8.0.6/lib/org/apache/logging/log4j/log4j-api/2.8.2/log4j-api-2.8.2.jar.bak

    -- logstash-input-beats-5.0.13-java 修改依赖(需要修改rb)
    mv /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-input-beats-5.0.13-java/vendor/jar-dependencies/org/apache/logging/log4j/log4j-api/2.6.2/log4j-api-2.6.2.jar /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-input-beats-5.0.13-java/vendor/jar-dependencies/org/apache/logging/log4j/log4j-api/2.6.2/log4j-api-2.6.2.jar.bak
    mkdir -p /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-input-beats-5.0.13-java/vendor/jar-dependencies/org/apache/logging/log4j/log4j-api/2.15.0/
    cp /home/log4j/log4j-api-2.15.0.jar /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-input-beats-5.0.13-java/vendor/jar-dependencies/org/apache/logging/log4j/log4j-api/2.15.0/
    vim /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-input-beats-5.0.13-java/lib/logstash-input-beats_jars.rb
    [log4j-api 2.6.2 版本改为 2.15.0]

    -- logstash-output-kafka-7.0.10 修改运行类库
    mv /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-kafka-7.0.10/vendor/jar-dependencies/runtime-jars/log4j-1.2-api-2.6.2.jar /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-kafka-7.0.10/vendor/jar-dependencies/runtime-jars/log4j-1.2-api-2.6.2.jar.bak
    mv /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-kafka-7.0.10/vendor/jar-dependencies/runtime-jars/log4j-api-2.6.2.jar /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-kafka-7.0.10/vendor/jar-dependencies/runtime-jars/log4j-api-2.6.2.jar.bak
    mv /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-kafka-7.0.10/vendor/jar-dependencies/runtime-jars/log4j-core-2.6.2.jar /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-kafka-7.0.10/vendor/jar-dependencies/runtime-jars/log4j-core-2.6.2.jar.bak
    cp /home/log4j/log4j-1.2-api-2.15.0.jar /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-kafka-7.0.10/vendor/jar-dependencies/runtime-jars/
    cp /home/log4j/log4j-api-2.15.0.jar /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-kafka-7.0.10/vendor/jar-dependencies/runtime-jars/
    cp /home/log4j/log4j-core-2.15.0.jar /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-kafka-7.0.10/vendor/jar-dependencies/runtime-jars/

    -- logstash-output-kafka-7.0.10 修改依赖
    mv /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-kafka-7.0.10/lib/org/apache/logging/log4j/log4j-api/2.6.2/log4j-api-2.6.2.jar /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-kafka-7.0.10/lib/org/apache/logging/log4j/log4j-api/2.6.2/log4j-api-2.6.2.jar.bak
    mv /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-kafka-7.0.10/lib/org/apache/logging/log4j/log4j-core/2.6.2/log4j-core-2.6.2.jar /opt/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-output-kafka-7.0.10/lib/org/apache/logging/log4j/log4j-core/2.6.2/log4j-core-2.6.2.jar.bak

    说明:

    (1) 对于依赖类库,如果类库文件有被插件使用,则需要修改 [plugin-name]/lib/*.rb 文件,只需查看 rb 文件则可知道是否有被使用。

     (2)修改时,出了需要查找 log4j-core、log4j-api 文件,还需关注目录下是否存在相关版本的其他 log4j 包,如 log4j-slf4j-impl、log4j-1.2-api 等,如果版本号相同,也都要替换。

    2、storm

    [停止 storm Topology]

    mv $storm/lib/log4j-api-2.8.2.jar $storm/lib/log4j-api-2.8.2.jar.bak

    mv $storm/lib/log4j-core-2.8.2.jar $storm/lib/log4j-core-2.8.2.jar.bak

    mv $storm/lib/log4j-slf4j-impl-2.8.2.jar $storm/lib/log4j-slf4j-impl-2.8.2.jar.bak

    cp /home/log4j/log4j-api-2.15.0.jar $storm/lib/

    cp /home/log4j/log4j-core-2.15.0.jar $storm/lib/

    cp /home/log4j/log4j-slf4j-impl-2.15.0.jar $storm/lib/

    重启 storm server

    [提交 storm Topology]

    说明:

    (1)对于低版本 storm,如 v1.1.1,启动 nibus 时,会出现如下异常:

    Exception in thread "main" java.lang.NoSuchMethodError: com.lmax.disruptor.dsl.Disruptor.<init>(Lcom/lmax/disruptor/EventFactory;ILjava/util/concurrent/ThreadFactory;Lcom/lmax/disruptor/dsl/ProducerType;Lcom/lmax/disruptor/WaitStrategy;)V
     at org.apache.logging.log4j.core.async.AsyncLoggerDisruptor.start(AsyncLoggerDisruptor.java:108)
     at org.apache.logging.log4j.core.async.AsyncLoggerContext.start(AsyncLoggerContext.java:75)
     at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:155)
     at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:47)
     at org.apache.logging.log4j.LogManager.getContext(LogManager.java:196)

    对于这种问题,还需升级 disruptor 包

    mv $storm/lib/disruptor-3.3.2.jar $storm/lib/disruptor-3.3.2.jar.bak

    cp /home/logstash $storm/lib/

    3、elasticsearch

    mv $elasticsearch_home/lib/log4j-api-2.11.1.jar $elasticsearch_home/lib/log4j-api-2.11.1.jar.bak
    mv $elasticsearch_home/lib/log4j-core-2.11.1.jar $elasticsearch_home/lib/log4j-core-2.11.1.jar.bak
    cp /home/log4j/log4j-api-2.15.0.jar $elasticsearch_home/lib/
    cp /home/log4j/log4j-core-2.15.0.jar $elasticsearch_home/lib/

    mv $elasticsearch_home/modules/x-pack-core/log4j-1.2-api-2.11.1.jar $elasticsearch_home/modules/x-pack-core/log4j-1.2-api-2.11.1.jar.bak

    mv $elasticsearch_home/modules/x-pack-security/log4j-slf4j-impl-2.11.1.jar $elasticsearch_home/modules/x-pack-security/log4j-slf4j-impl-2.11.1.jar.bak

    cp /home/log4j/log4j-1.2-api-2.15.0.jar $elasticsearch_home/modules/x-pack-core/

    cp /home/log4j/log4j-slf4j-impl-2.15.0.jar $elasticsearch_home/modules/x-pack-security/

    [停止 sink es 业务]

    [重启 es server]

    [启动 sink es 业务]

    其他组件升级,后续更新...

    展开全文
  • log4j-core-2.7.jar

    热门讨论 2016-11-29 16:26:38
    log4j-core-2.7.jar
  • log4jlog4j2性能对比及log4j升级至log4j2方案

    万次阅读 多人点赞 2019-06-16 11:03:53
    1.前言 之前某个服务在压测环境中出现了问题,分析之后得知是log4jLogger对象争用厉害,很多线程阻塞在此。...关于log4jlog4j2的性能对比文章有很多,本文不过多描述,给出几张结论图及原文链接,作为参考...

    1.前言

    • 之前某个服务在压测环境中出现了问题,分析之后得知是log4jLogger对象争用厉害,很多线程阻塞在此。

    • 以上问题证明log4j在高并发高QPS情况下,是存在性能问题的。

    • 之后把log4j升级成了log4j2,并采取异步日志模式,解决了因日志造成的性能问题。

    2.性能对比

    关于log4j与log4j2的性能对比文章有很多,本文不过多描述,给出几张结论图及原文链接,作为参考。

    1. Log4j1、Logback 以及 Log4j2 性能测试对

      在这里插入图片描述
      上述图片由原文作者【ksfzhaohui】提供,特此感谢!

    2. logback log4j log4j2 性能实测

      在这里插入图片描述
      上述图片由原文作者【专注服务端】提供,特此感谢!

    3. 高性能队列——Disruptor

      在这里插入图片描述
      上述图片由原文作者【宫铭】提供,特此感谢!

    3.相关知识

    • 和日志相关的概念有:log4j、log4j2、logback、commons-logging、slf4j
    • 其中,log4j、log4j2、logback、commons-logging都是日志的具体实现包。
    • 其中,slf4j是一个门面,一个适配器,所有的日志代码都可以用slf4j来写,它会根据项目具体依赖的日志实现包进行日志操作。
    • 通过slf4j写日志的好处是,当更换日志的实现方案时,无需修改日志代码,只需修改pom.xml即可。
    • 推荐:通过slf4j写日志。
    • 推荐:通过lombok的@Slf4j注解写日志。

    4.log4j升级至log4j2

    4.1.排除旧的日志实现包

    • 因为每个项目的pom.xml多种多样,所以无法总结统一的排除方案,这里只汇总需要排除的包。

    • 也就是说,如果你的项目里有以下包,应该排除。

    <exclusions>
        <!-- log4j 相关包 -->
        <exclusion>
            <artifactId>log4j</artifactId>
            <groupId>log4j</groupId>
        </exclusion>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>log4j</artifactId>
        </exclusion>
        <exclusion>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
        <!-- log4j 的springboot starter -->
        <exclusion>
            <artifactId>spring-boot-starter-log4j</artifactId>
            <groupId>org.springframework.boot</groupId>
        </exclusion>
     
        <!-- logback 相关包 -->
        <exclusion>
            <artifactId>logback-classic</artifactId>
            <groupId>ch.qos.logback</groupId>
        </exclusion>
        <exclusion>
            <artifactId>logback-core</artifactId>
            <groupId>ch.qos.logback</groupId>
        </exclusion>
     
        <!-- slf4j 相关包 -->
        <exclusion>
            <artifactId>slf4j-log4j12</artifactId>
            <groupId>org.slf4j</groupId>
        </exclusion>
         <exclusion>
            <artifactId>log4j-to-slf4j</artifactId>
            <groupId>org.apache.logging.log4j</groupId>
        </exclusion>
        <exclusion>
            <artifactId>slf4j-api</artifactId>
            <groupId>org.slf4j</groupId>
        </exclusion>
    </exclusions>
    

    4.2.增加log4j2的依赖包

    <!-- log4j2的api、core和web包 -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.11.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.11.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-web</artifactId>
        <version>2.11.1</version>
    </dependency>
    <!-- slf4j与log4j2的连接包 -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.11.1</version>
    </dependency>
    <!-- log4j与log4j2的连接包 -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-1.2-api</artifactId>
        <version>2.11.1</version>
    </dependency>
    <!-- log4j2支撑完全异步模式的关键api -->
    <dependency>
        <groupId>com.lmax</groupId>
        <artifactId>disruptor</artifactId>
        <version>3.4.2</version>
    </dependency>
    <!-- slf4j本身的api -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
    </dependency>
    

    4.3.修复编译报错

    • 如果之前代码中日志都是直接通过log4j编写的,则可能需要修改import路径。
    • 在log4j版本,Logger的包路径是org.apache.log4j
    • 在log4j2版本,Logger的包路径是org.apache.logging.log4j

    4.4.替换日志配置文件

    • 在log4j版本,配置文件为log4j.xml或者log4j.properties。

    • 在log4j2版本,配置文件为log4j2.xml。

    • 在log4j2版本,支持三种异步方式:Sync(同步)、Async Appender(混合异步)和Loggers All Async(全异步),其性能优势依次递增。

    • 下面给出一份全异步的参考配置。

      <?xml version="1.0" encoding="UTF-8"?>
      <configuration status="error" monitorInterval="30">
          <Properties>
              <Property name="baseDir">log</Property>
          </Properties>
          <!--先定义所有的appender-->
          <appenders>
              <!--这个输出控制台的配置-->
              <Console name="Console" target="SYSTEM_OUT">
                  <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
                  <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
                  <PatternLayout pattern="%d %5p %c:%L - %m %throwable{}%n"/>
              </Console>
              <!--异步日志配置,指向配置引用AppenderRef-->
              <Async name="ASYNC" bufferSize="262144" includeLocation="true">
                  <AppenderRef ref="RollingFile"/>
              </Async>
              <!--日志文件配置,filePattern为日志文件名称的格式-->
              <RollingFile name="RollingFile" fileName="${baseDir}/info.log" filePattern="${baseDir}/info.log.%d{yyyy-MM-dd}">
                  <!--日志内容格式-->
                  <PatternLayout pattern="%d %5p %c:%L - %m %throwable{separator( --> )}%n"/>
                  <!--依据时间创建新的日志文件:1d-->
                  <TimeBasedTriggeringPolicy interval="1"/>
                  <DefaultRolloverStrategy>
                      <!-- 在轮转时,删除7天之前的,命名符合规则的文件 -->
                      <Delete basePath="${baseDir}">
                          <IfFileName glob="info.log.*"/>
                          <IfLastModified age="7d"/>
                      </Delete>
                  </DefaultRolloverStrategy>
              </RollingFile>
          </appenders>
          <!--然后定义logger,只有定义了logger并引入的appender,appender才会生效-->
          <loggers>
              <root level="INFO">
                  <appender-ref ref="Console"/>
                  <appender-ref ref="RollingFile"/>
              </root>
              <!--这里配置 过滤日志 -->
              <logger name="org.hibernate.validator" level="ERROR"/>
          </loggers>
      </configuration>
      
    展开全文
  • springboot配置log4j2

    千次阅读 2022-02-15 15:53:59
    springboot配置log4j21.引入相关的依赖2.配置相应的log4j2.yml及application.yml文件3.编写相应的测试接口4.在postman中进行测试即可 部分内容参考: log4j2.yml配置的文章,很具体,可参考 一个log4j.xml配置的文章...


    部分内容参考:
    log4j2.yml配置的文章,很具体,可参考
    一个log4j.xml配置的文章(可以参考)

    1.引入相关的依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
    
    <!-- 包含 mvc,aop 等jar资源 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <!-- 切换log4j2日志读取 -->
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    
    <!-- 配置 log4j2 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>
    <!-- 加上这个才能辨认到log4j2.yml文件 -->
    <dependency>
        <groupId>com.fasterxml.jackson.dataformat</groupId>
        <artifactId>jackson-dataformat-yaml</artifactId>
    </dependency>
    

    注意
    一定要注意项目中原本的依赖,可能会有冲突,因为使用log4j2依赖一定要排除原本项目中的log4j、logback相关依赖
    我就在此处一直报错,但是最后也不知道哪里错了。。

    如果一直报错,如下代码所示。就在右侧maven框中,将项目clean再install一下。

    SLF4J: Class path contains multiple SLF4J bindings.
    SLF4J: Found binding in [jar:file:/C:/Users/Zll/.m2/repository/ch/qos/logback/logback-classic/1.2.6/logback-classic-1.2.6.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: Found binding in [jar:file:/C:/Users/Zll/.m2/repository/org/apache/logging/log4j/log4j-slf4j-impl/2.14.1/log4j-slf4j-impl-2.14.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
    SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
    SLF4J: Actual binding is of type [ch.qos.logback.classic.util.ContextSelectorStaticBinder]
    

    2.配置相应的log4j2.yml及application.yml文件

    log4j2.yml:
    注意log4j2的配置文件中的文件存储地址是由log.path的value值决定的。如果value值没有写具体哪个盘,就默认在当前项目路径中创建
    配置日志路径
    测试后在项目中生成对应的日志

    # 共有8个级别,按照从低到高为:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF。
    
    Configuration:
      status: warn
      monitorInterval: 30
    
      Properties: # 定义全局变量
        Property: # 缺省配置(用于开发环境)。其他环境需要在VM参数中指定,如下:
          #测试:-Dlog.level.console=warn -Dlog.level.xjj=trace
          #生产:-Dlog.level.console=warn -Dlog.level.xjj=info
          - name: log.level.console
            value: info
          - name: log.path
            value: logs/${project.name}_log
          - name: project.name
            value: opendoc
          - name: log.pattern
            value: "%d{yyyy-MM-dd HH:mm:ss.SSS} -%5p ${PID:-} [%15.15t] %-30.30C{1.} : %m%n"
    
      Appenders:
        Console:  #输出到控制台
          name: CONSOLE
          target: SYSTEM_OUT
          PatternLayout:
            pattern: ${log.pattern}
        #   启动日志
        RollingFile:
          - name: ROLLING_FILE
            fileName: ${log.path}/${project.name}.log
            filePattern: "${log.path}/historyRunLog/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
            PatternLayout:
              pattern: ${log.pattern}
            Filters:
              #        一定要先去除不接受的日志级别,然后获取需要接受的日志级别
              ThresholdFilter:
                - level: error
                  onMatch: DENY
                  onMismatch: NEUTRAL
                - level: info
                  onMatch: ACCEPT
                  onMismatch: DENY
            Policies:
              TimeBasedTriggeringPolicy:  # 按天分类
                modulate: true
                interval: 1
            DefaultRolloverStrategy:     # 文件最多100个
              max: 100
          #   平台日志
          - name: PLATFORM_ROLLING_FILE
            ignoreExceptions: false
            fileName: ${log.path}/platform/${project.name}_platform.log
            filePattern: "${log.path}/platform/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
            PatternLayout:
              pattern: ${log.pattern}
            Policies:
              TimeBasedTriggeringPolicy:  # 按天分类
                modulate: true
                interval: 1
            DefaultRolloverStrategy:     # 文件最多100个
              max: 100
          #   业务日志
          - name: BUSSINESS_ROLLING_FILE
            ignoreExceptions: false
            fileName: ${log.path}/bussiness/${project.name}_bussiness.log
            filePattern: "${log.path}/bussiness/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
            PatternLayout:
              pattern: ${log.pattern}
            Policies:
              TimeBasedTriggeringPolicy:  # 按天分类
                modulate: true
                interval: 1
            DefaultRolloverStrategy:     # 文件最多100个
              max: 100
          #   错误日志
          - name: EXCEPTION_ROLLING_FILE
            ignoreExceptions: false
            fileName: ${log.path}/exception/${project.name}_exception.log
            filePattern: "${log.path}/exception/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
            ThresholdFilter:
              level: error
              onMatch: ACCEPT
              onMismatch: DENY
            PatternLayout:
              pattern: ${log.pattern}
            Policies:
              TimeBasedTriggeringPolicy:  # 按天分类
                modulate: true
                interval: 1
            DefaultRolloverStrategy:     # 文件最多100个
              max: 100
          #   DB 日志
          - name: DB_ROLLING_FILE
            ignoreExceptions: false
            fileName: ${log.path}/db/${project.name}_db.log
            filePattern: "${log.path}/db/$${date:yyyy-MM}/${project.name}-%d{yyyy-MM-dd}-%i.log.gz"
            PatternLayout:
              pattern: ${log.pattern}
            Policies:
              TimeBasedTriggeringPolicy:  # 按天分类
                modulate: true
                interval: 1
            DefaultRolloverStrategy:     # 文件最多100个
              max: 100
    
    
      Loggers:
        Root:
          level: info
          AppenderRef:
            - ref: CONSOLE
            - ref: ROLLING_FILE
            - ref: EXCEPTION_ROLLING_FILE
        Logger:
          - name: platform
            level: info
            additivity: false
            AppenderRef:
              - ref: CONSOLE
              - ref: PLATFORM_ROLLING_FILE
    
          - name: bussiness
            level: info
            additivity: false
            AppenderRef:
              - ref: BUSSINESS_ROLLING_FILE
    
          - name: exception
            level: debug
            additivity: true
            AppenderRef:
              - ref: EXCEPTION_ROLLING_FILE
    
          - name: db
            level: info
            additivity: false
            AppenderRef:
              - ref: DB_ROLLING_FILE
    
    
      #    监听具体包下面的日志
      #    Logger: # 为com.xjj包配置特殊的Log级别,方便调试
      #      - name: com.xjj
      #        additivity: false
      #        level: ${sys:log.level.xjj}
      #        AppenderRef:
      #          - ref: CONSOLE
      #          - ref: ROLLING_FILE
    

    application.xml:(注意将原本springboot文件中内置日志的相关配置清除)项目原本配置
    application.xml:

    logging:
      config: classpath:log4j2.yml
    

    3.编写相应的测试接口

    引入相应包:

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    //定义logger:
    protected final Logger logger = LoggerFactory.getLogger(this.getClass());
    
    //在Controller中随便写个测试接口,使用第一种第二种都可
    //第一种,没有定义相应的配置工具类,简单使用
    @GetMapping(value="/test")
    	public String test(){
    		logger.debug("debug ****************************");
    		logger.info("info ****************************");
    		logger.warn("warn ****************************");
    		logger.error("error ****************************");
    		return "success";
    	}
    	
    	//第二种,定义了相应的log枚举类、工具类,具体可参见引用的文章,很具体。
    	@GetMapping("/helloworld")
    	public String helloworld() throws Exception{
    		Logger log = LogUtils.getExceptionLogger();
    		Logger log1 = LogUtils.getBussinessLogger();
    		Logger log2 = LogUtils.getDBLogger();
    		userService.findUsers(0,10,"");
    		log.error("getExceptionLogger===日志测试");
    		log1.info("getBussinessLogger===日志测试");
    		log2.debug("getDBLogger===日志测试");
    		return "helloworld";
    	}
    

    4.在postman中进行测试即可

    postman
    显示日志
    如图示即可。
    如果觉得代码不完整,参考相应的参考文章(更为具体)

    最后,感觉log4j2配置完以后看不到数据库表调用的SQL语句。(也可能我还没配置到)没有springboot内置的日志好,那个直接改为debug级别就可以显示sql及库表调用的情况。

    # 调试时使用
      Loggers:
        Root:
          level: info
          AppenderRef:
            - ref: CONSOLE
        Logger: #单独设置某些包的输出级别
          - name: com.thzh #复数加上-
            additivity: false #去除重复的log
            level: debug
            AppenderRef:
              - ref: CONSOLE #复数加上-
              - ref: ROLLING_FILE #复数加上-
    

    具体为什么这么配置不太清楚,慢慢学习。

    展开全文
  • Log4j高危漏洞原理及复现

    千次阅读 2021-12-15 22:08:02
    Log4j高危漏洞原理及复现 漏洞检测||复现环境 查看JDK版本,发现版本小于1.8u121 图3-7 查看JDK版本 查看log4j2版本,发现版本在2.x <= 2.14.1内 图3-8 查看log4j2版本 查看代码,发现存在log4j2相关的lookup...
  • Log4j.properties配置文件详解

    千次阅读 2022-01-20 17:21:02
    Log4J的配置文件(Configuration File)就是用来设置记录器的级别、存放器和布局的,它可接key=value格式的设置或xml格式的设置信息。通过配置,可以创建出Log4J的运行环境。 1. 配置文件 Log4J配置文件的基本格式...
  • 关于log4j的dtd文件

    热门讨论 2014-08-31 14:49:31
    log4j.dtd,可以控制日志信息输送的目的地是控制台、文件、GUI组件,希望对大家有帮助
  • ###一句话总结issue###如果你使用的是 Log4j 1.x、Logback 或者其他日志框架,这次就可以幸免于难。如果你使用Spring Boot`默认日志`,也是没有问题的,因为默认是`Commons Logging`。 ###一句话solution###升级...
  • log4j漏洞分析及总结

    万次阅读 2022-02-14 00:11:00
    2021年12月8号爆出的log4j2的远程代码执行漏洞【cve-2021-44228】,堪称史诗级核弹漏洞,虽然过了这么久,大部分现网中的相关漏洞已经修复,但任然可以捡漏…,网上也有不少大佬和研究机构都对该漏洞做了分析和复盘,...
  • Caused by: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory 需要jar log4j-1.2.16.jar slf4j-api-1.6.1.jar slf4j-log4j12-1.6.1.jar
  • log4j.properties配置与使用 一、log4j简介 1、简介 log4j是使用java语言编写的可靠的、快速的、灵活的日志框架,它是基于Apache的license。log4j是一个功能强大的日志组件,提供方便的日志记录。 Log4j由三个...
  • 文章目录前言一、查看当前log4j版本二、升级log4j版本 前言    log4j发生了巨大漏洞,可以在远程直接在服务器上执行多种操作,被戏称log4shell,众多公司面临解决log4j漏洞问题,本文主要介绍log4j升级...
  • 老生常谈Log4jLog4j2的区别(推荐)

    千次阅读 2021-02-26 15:06:43
    相信很多程序猿朋友对log4j都很熟悉,log4j可以说是陪伴了绝大多数的朋友开启的编程。我不知道log4j之前是用什么,至少在我的生涯中,是log4j带我开启的日志时代。log4j是Apache的一个开源项目,我们不去考究它的...
  • WEB应用log4j1.x升级到log4j2.17.1

    千次阅读 2022-01-08 12:12:14
    WEB应用Log4j1.x升级到log4j2.17.1WEB应用log4j1.x升级到log4j2.17.1环境条件删除旧版本JAR包删除log4j1.x的日志配置文件删除log4j1.x的启动配置或代码新增log4j2的jar包依赖新增log4j2的日志配置文件新增log4j2的...
  • Log4j.properties配置详解

    万次阅读 2020-04-02 15:19:25
    1 入门示例 1.1 新建一个Java工程,导入包log4j-1.2.17.jar,整个工程最终目录如下 1.2 src同级创建并设置log4j.properties ### 设置### ...log4j.appender.stdout = org.apache.log4j.Conso...
  • log4j的项目升级到log4j2

    千次阅读 2020-10-15 19:35:25
    0.背景 虽然大部分的java项目使用的都是logback,但是仍然有很多...但是log4j已经于2012年停止更新,并且log4j扫出如下安全漏洞: https://rnd-vulncenter.huawei.com/vuln/toViewOfficialDetail?cveId=CVE-2020-9488 ...
  • log4j2 的使用【超详细图文】

    万次阅读 多人点赞 2020-12-06 16:11:03
    log4j2 的使用 Apache Log4j2 是对Log4j 的升级版本,参考了logback 的一些优秀的设计,并且修复了一些问题,因此带来了一些重大的提升,主要有: 异常处理,在logback中,Appender中的异常不会被应用感知到,但是...
  • Slf4jlog4jlog4j2的关系及使用方法

    千次阅读 2020-03-08 00:37:39
    Slf4jlog4jlog4j2的关系及使用方法 slf4j slf4j仅仅是一个为Java程序提供日志输出的统一接口,并不是一个具体的日志实现方案,就比如JDBC一样,只是一种规则而已,所以单独的slf4j是不能工作的,必须搭配...
  • log4j2漏洞分析

    千次阅读 2022-04-09 01:17:43
    log4j2漏洞分析环境布置前言 环境布置 和前面的JNDI注入时用的代码差不多 package Log4j2; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class log4j { private...
  • log4j2的使用及配置详解

    千次阅读 2022-02-17 11:11:31
    众所周知,最近log4j被测出了漏洞,先是log4j2被测出了漏洞,漏洞影响范围为Log4j2.x <= 2.14.1;后来又被测出log4j1.X也有漏洞,范围为整个1.X版本。我们项目中,用的是log4j1.x。所以,结合以上两个漏洞,我们...
  • Log4j2远程执行代码漏洞如何攻击? 又如何修复
  • springboot升级log4j2,解决漏洞问题

    千次阅读 2021-12-17 11:06:38
    最近log4j2爆出有重大漏洞问题,公司也紧急要求各个项目自己查验,要求将log4j的版本升到安全版本
  • Log4j使用教程

    万次阅读 2021-08-16 20:11:47
    日志是应用软件中不可缺少的部分,Apache的开源项目log4j是一个功能强大的日志组件,提供方便的日志记录。在apache网站:jakarta.apache.org/log4j可以免费下载到Log4j最新版本的软件包。Maven工程中依赖如下: <...
  • 关于Log4j 1.x 升级Log4j 2.x 那些事

    千次阅读 2019-09-20 12:35:37
    log4j 1.x 升级log4j 2.x 踩坑攻略
  • 项目日志jar包 3个 可运行 放入项目中不需要其他

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,012,543
精华内容 405,017
关键字:

LOG4J