精华内容
下载资源
问答
  • 来自...所有的log4j级别,这些级别都相当于一层层的过滤器Log4J LevelsTRACE LevelDEBUG LevelINFO LevelWARN LevelERROR LevelFATAL LevelTRACE LevelYYYYYYDEBUG LevelNYYYY...

    来自https://blog.csdn.net/techq/article/details/6636287,感谢作者的无私分享。

    所有的log4j的级别,这些级别都相当于一层层的过滤器

    Log4J LevelsTRACE LevelDEBUG LevelINFO LevelWARN LevelERROR LevelFATAL Level
    TRACE LevelYYYYYY
    DEBUG LevelNYYYYY
    INFO LevelNNYYYY
    WARN LevelNNNYYY
    ERROR LevelNNNNYY
    FATAL LevelNNNNNY
    ALL LevelYYYYYY
    OFF LevelNNNNNN

    注:ALL和OFF是1.2.12加上去的

     

    例如1:

    log4j.rootLogger=ALL 所有的记录都可以输出,相当于没有过滤

    log4j.appender.CONSOLE.Threshold= OFF 所有的记录都不能输出,相当于在ALL的基础上过滤了所有的记录

    例如2:

    log4j.rootLogger=TRACE  和ALL一样,相当于没有过滤记录

    log4j.appender.CONSOLE.Threshold= INFO 这样一来输出了INFO 、WARN、ERROR 和 FATAL的记录


    展开全文
  • log4j 级别(level)

    万次阅读 2011-07-26 23:15:02
    所有的log4j级别,这些级别都相当于一层层的过滤器Log4J LevelsTRACE LevelDEBUG LevelINFO LevelWARN LevelERROR LevelFATAL LevelTRACE LevelYYYYYYDEBUG LevelNYYYYYINF

    所有的log4j的级别,这些级别都相当于一层层的过滤器

    Log4J LevelsTRACE LevelDEBUG LevelINFO LevelWARN LevelERROR LevelFATAL Level
    TRACE LevelYYYYYY
    DEBUG LevelNYYYYY
    INFO LevelNNYYYY
    WARN LevelNNNYYY
    ERROR LevelNNNNYY
    FATAL LevelNNNNNY
    ALL LevelYYYYYY
    OFF LevelNNNNNN

    注:ALL和OFF是1.2.12加上去的

     

    例如1:

    log4j.rootLogger=ALL 所有的记录都可以输出,相当于没有过滤

    log4j.appender.CONSOLE.Threshold= OFF 所有的记录都不能输出,相当于在ALL的基础上过滤了所有的记录

    例如2:

    log4j.rootLogger=TRACE  和ALL一样,相当于没有过滤记录

    log4j.appender.CONSOLE.Threshold= INFO 这样一来输出了INFO 、WARN、ERROR 和 FATAL的记录

    展开全文
  • 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>
      
    展开全文
  • Log 4j 按照level级别分类存储方法

    千次阅读 2004-12-23 11:09:00
    Log 4j 按照level级别分类存储方法 Log4j是目前日志记录的业界标准,其强大,完善的功能可以满足我们大部分的需要。为我们的应用系统提供完美的日志处理方法。我们知道,在log4j中的日志级别分为 LOG、DEBUG、INFO...

    Log 4j 按照level级别分类存储方法

     

    Log4j是目前日志记录的业界标准,其强大,完善的功能可以满足我们大部分的需要。为我们的应用系统提供完美的日志处理方法。

    我们知道,在log4j中的日志级别分为 LOGDEBUGINFOWARNERROR、和fatal六个级别。它的灵活配置机制也是log4j足以出色的一个重大原因,采用类继承的方式可以进行包级、类级、以及根级配置。在我学习log4j的过程中,曾经苦恼于好像log4j不能按照append进行类别的分类,只能有一个全局的,然后影响到所有的append。这样的一个缺点是把所有需要的日志混合在一起,在查看、分析的时候总是不怎么方便。

    前几天,我下载一个jive 论坛,突然发现他的日志处理系统就是按照目标、级别分类,把不同的日志种类存放到不同的地方,我非常高兴的打开jive的发布包进行查看,令我有点失望的是jive采用的是自己的日志实现方式,没有采用log4j。我觉得自己找到方法处理这个问题,真没有的话也可以自己修改些log4j的代码,总是要实现这个目标。

    在参考了很久好,找到了过滤的方法,采用 LevelMatchFilter  类可以很好的完成工作。比较遗憾的是,使用filter类,必须采用log4j.xml配置方式,从log4j.properties转换到xml也并不困难,我们来参考一下全部的xml配置文件:

     

    <?xml version="1.0" encoding="UTF-8" ?>

    <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

    <log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'>

     

        <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">

        <layout class="org.apache.log4j.PatternLayout">

        <param name="ConversionPattern" value="%-4r [%t] %-5p %c %x - %m%n"/>

        </layout> 

       

        <filter class="org.apache.log4j.varia.LevelRangeFilter">

           <param name="levelMin" value="info" />

           <param name="levelMax" value="info" />   

           <param name="AcceptOnMatch" value="true" />

        </filter>

        </appender>  

     

        <appender name="FILE_DEBUG" class="org.apache.log4j.RollingFileAppender">

        <param name="File" value="log_debug.log"/>   

        <layout class="org.apache.log4j.PatternLayout"> 

        <param name="ConversionPattern" value="%-4r [%t] %-5p %c %x - %m%n"/>

        </layout> 

       

        <filter class="org.apache.log4j.varia.LevelRangeFilter">

           <param name="levelMin" value="DEBUG" />

           <param name="levelMax" value="DEBUG" />      

           <param name="AcceptOnMatch" value="true" />

        </filter>

        </appender>

     

     

        <appender name="FILE_ERROR" class="org.apache.log4j.RollingFileAppender">

        <param name="File" value="log_error.log"/>   

        <layout class="org.apache.log4j.PatternLayout">

        <param name="ConversionPattern" value="%-4r [%t] %-5p %c %x - %m%n"/>

        </layout> 

       

        <filter class="org.apache.log4j.varia.LevelRangeFilter">

           <param name="levelMin" value="ERROR" />

           <param name="levelMax" value="ERROR" />      

           <param name="AcceptOnMatch" value="true" />

        </filter>

        </appender>

     

        <appender name="FILE_log" class="org.apache.log4j.RollingFileAppender">

           <param name="File" value="log_log.log"/> 

           <layout class="org.apache.log4j.PatternLayout">

           <param name="ConversionPattern" value="%-4r [%t] %-5p %c %x - %m%n"/>

        </layout>    

     

        </appender>  

       

        <!--   调整使用那些append

    <appender-ref ref="FILE_log"/>   

        -->

        <root>

           <level value ="debug"/>

           <appender-ref ref="STDOUT"/> 

           <appender-ref ref="FILE_ERROR"/>

           <appender-ref ref="FILE_DEBUG"/>         

        </root>   

    </log4j:configuration>

     

    请注意用绿色标志处理的内容:

        <filter class="org.apache.log4j.varia.LevelRangeFilter">

           <param name="levelMin" value="ERROR" />

           <param name="levelMax" value="ERROR" />      

           <param name="AcceptOnMatch" value="true" />

        </filter>

    这里,我们使用类org.apache.log4j.varia.LevelRangeFilter过滤日志级别,通过配置它的levelMinlevelMax参数,这样我们可以指定日志的级别到不同的目标。我们使用  <appender-ref ref="FILE_ERROR"/><appender-ref ref="FILE_DEBUG"/>

    两个文件目标,把属于ERROR的日志存放到FILE_ERROR文件,把属于  DEBUG的日志存放到FILE_DEBUG文件。

     

    采用日志的过滤,存储的不同的空间是否会造成性能问题呢,我这里做了一个测试,参看代码:

    package com.guipei.test;

     

    import org.apache.log4j.*;

     

    /**

     * @author guipei

    */

    public class Log4j {

     

        public static Logger logger = Logger.getLogger(Log4j.class);

       

        public static void main(String[] args) {

          

           int loop = 1000;

          

           long now = System.currentTimeMillis();

           for (int i = 0; i < loop; i++) {

               logger.info("logger info" + i);   

               logger.debug("logger debug" + i);

               logger.error("logger error" + i);     

               logger.warn("logger warn" + i);

              

           }

                 

           long run = System.currentTimeMillis() - now;

          

           System.out.println("run time :" + run);      

          

        }

    }

     

     

    我们配置xml文件的配置部分,使用过滤日志到两个目标,使用不过滤日志到一个目标,参看下面配置:

        <!--   调整使用那些append

    <appender-ref ref="FILE_log"/>   

        -->

        <root>

           <level value ="debug"/>

           <appender-ref ref="STDOUT"/> 

           <appender-ref ref="FILE_ERROR"/>

           <appender-ref ref="FILE_DEBUG"/>         

        </root>   

     

     

    分别运行代码,使用的时间基本一致,都保持在500毫秒左右,可以相信,使用日志过滤带来方便的同时,并没有性能上面的影响。

     

    这样,我们是不是更方便的使用日志了。希望对你能够有所帮助,最后请注意使用这种方式需要使用xml方式配置log4j

     

    展开全文
  • log4j2 自定义日志级别

    千次阅读 2018-11-16 15:15:38
    注意 : intLevel 值越小,级别越高 (log4j2 官方文档)   自定义日志级别 第一步 :声明自定义级别 intLevel参考上面的值 &lt;CustomLevels&gt; &lt;CustomLevel name="INITLEVEL&...
  • 动态改变log4j级别(level)

    千次阅读 2016-11-22 19:11:39
    转载:http://stackoverflow.com/questions/4598702/dynamically-changing-log4j-log-level Changing the log level is simple; modifying other portions of the configuration will pose a ...
  • I'm currently working on a project that uses log4j.I'm running a testcase (junit) and would like to set the log level to trace so that I can see if all the values are correct. Classes that use logging...
  • log4j2 自定义级别

    千次阅读 2017-04-20 16:00:37
    log4j2还支持在代码中定义level,如果是在代码中定义,又使用了xml,则必须在xml加载之前定义好,否则在记录自定义级别日志时,找不到该级别,从而记录失败。 log4j2.xml里的properties配置必须放在xml...
  • log4j2 实际使用详解

    万次阅读 多人点赞 2017-05-12 19:31:07
    日志框架简单比较(slf4jlog4j、logback、log4j2log4j2基础知识 log4j2实用配置 实战部分 slf4j + log4j2 实际使用 二、日志框架比较(slf4jlog4j、logback、log4j2 ) 日志接口(slf4j) slf4j是对所有日志...
  • log4j2自定义级别日志

    2020-08-19 17:43:21
    实际开发项目中有时候需要将某些信息单独输出到一个文件以做分析,为了让日志信息更清晰,这时就可以用到log4j2的自定义日志级别输出到独立的文件中。 log4j2依赖包导入什么的这里就不说了,直接上配置和代码。 ...
  • log4j2模板,log4j模板,log4j相关属性

    千次阅读 多人点赞 2020-10-16 17:34:32
    log4j2模板1.1 `pom.xml`依赖1.2 `log4j2.xml`配置文件1.3 java中使用2. log4j模板2.1 `pom.xml`依赖2.2 `log4j.properties` 源配置2.3 `log4j.properties` 配置解释【***】2.4 java中使用学习参考地址 1. log4j2...
  • log4j2自定义日志级别

    2020-05-13 15:58:19
    项目中需要打印一些特定信息到日志中,因为不想掺杂一些其他的日志,所以自定义一个日志级别 日志级别以及优先级排序: OFF > FATAL >...log4j2.xml <configuration status="DEBUG" monit
  • log4j2自定义过滤器If you have used log4j, you will notice that there are many methods to log messages. For example: 如果您使用过log4j,则会注意到有许多记录消息的方法。 例如: logger.trace("My Log ...
  • Log4j2-Log4j 2介绍及使用

    万次阅读 2017-07-15 11:08:39
    Log4j 2 官网https://logging.apache.org/log4j/2.x/Log4j 2简介Log4j的1.x版本已经被广泛使用于很多应用程序中。然而,它这些年的发展已经放缓。它变得越来越难以维护,因为它需要严格遵循很老的Java版本,并在2015...
  • log4j2配置appender级别的过滤器,这是log4j2日志打印中,顺序执行的最后一条过滤器,过滤器执行后,将进入appender,完成日志打印 源码分析 以输出一条debug日志为例 log.debug("this is a debug log."); 程序将...
  • LoggerConfig级别的过滤器是Log4j2第二级别的过滤器,该过滤器将在日志事件(logEvent)生成后执行 源码追踪 @Override public void debug(final String message, final Object... params) { logIfEnabled(FQCN, ...
  • public class Log4jTestApplication { //在info和warn中间定义新的日志级别 final static Level MIRINFO = Level.forName("MIRINFO", 310); final static Level URINFO = Level.forName("URINFO", 320); ...
  • log4j2相对于log4j 1.x有了脱胎换骨的变化,其官网宣称的优势有多线程下10几倍于log4j 1.x和logback的高吞吐量、可配置的审计型日志、基于插件架构的各种灵活配置等。如果已经掌握log4j 1.x,使用log4j2还是非常简单...
  • spark 如何配置日志打印级别 Log4j.properties文件 1、spark自身的打印级别 首先明白如何设置spark本身的日志级别 Edit yourconf/log4j.propertiesfile and change the following line: log4j.rootCategory=...
  • Log4j自定义日志级别

    2020-07-12 17:51:12
    Log4j 1.2.8 自定义日志级别目的实现自定义日志级别log4j.xml配置文件执行结果结构分析流程综述主要代码 目的 由于要实现需求:将特定的跟踪日志写入单独的日志文件,且其他的日志输出不受影响。故需要实现一个...
  • 配置内容 #定义输出级别和输出平台 log4j.rootLogger=error, console...log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout log4j.appen
  • springboot中动态修改log4j2日志级别

    千次阅读 2019-08-05 23:41:21
    转载 来源:博客园 作者:何其有静 地址:...在spring boot中使用log4j2日志时,项目运行中,想要修改日志级别。 1.pom.xml依赖: <dependency> <groupId>org.apache.logging.log4j&l...
  • 1.如果使用log4j.properties 配置 #定义LOG输出级别 log4j.rootLogger=DEBUG,Console,File #定义日志输出目的地为控制台 log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console....
  • log4j2配置文件log4j2.xml配置详解

    万次阅读 2017-04-07 15:14:04
    log4j2配置文件log4j2.xml配置详解
  • 一. 属性详解 onMatch="ACCEPT"匹配该级别及以上级别; onMatch="DENY"不匹配该级别及以上级别; onMismatch="ACCEPT" 表示匹配该级别以下的级别;...ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 44,768
精华内容 17,907
关键字:

level级别log4j2