log4j2知识点梳理

        log4j2很久以前就用过了,每次只是奉行“拿来主义”,对于其知识点没有一个系统的了解,粗略的看了看官方文档,整理了一下几个关键的知识点。java

  • 依赖包

        log4j-core-xx.jar程序员

   log4j-api-xx.jarspring

  • log4j2与log4j1.x差异

  1. log4j2与log4j1.x不能兼容,所以不能无缝升级
  2. Log4j2.4及更高版本最低依赖Java 7,版本2.0-alpha1到2.3最低依赖Java 6。
  3. log4j2配置更简洁,log4j2.4以后从新支持property配置,可是与log4j1.x不兼容
  4. 新增了JSON和YAML的配置方式,可是须要增长额外的依赖,不建议这种方式
  5. Log4j2.4开始,提供了编程配置的API
  • log4j2配置文件加载顺序

  1. Log4j将检查“log4j.configurationFile”系统属性,若是设置,将尝试使用与文件扩展名匹配的ConfigurationFactory加载配置。数据库

  2. 若是未设置系统属性,则ConfigurationFactory属性将在classpath中查找log4j2-test.properties。编程

  3. 若是没有找到这样的文件,YAML ConfigurationFactory将在classpath中查找log4j2-test.yaml或log4j2-test.yml。json

  4. 若是没有找到这样的文件,JSON ConfigurationFactory将在classpath中查找log4j2-test.json或log4j2-test.jsn。api

  5. 若是找不到这样的文件,XML ConfigurationFactory将在classpath中查找log4j2-test.xml。app

  6. 若是找不到测试文件,ConfigurationFactory属性将在classpath上查找log4j2.properties。dom

  7. 若是找不到属性文件,YAML ConfigurationFactory将在classpath上查找log4j2.yaml或log4j2.yml。测试

  8. 若是找不到YAML文件,JSON ConfigurationFactory将在classpath上查找log4j2.json或log4j2.jsn。

  9. 若是找不到JSON文件,XML ConfigurationFactory将尝试在classpath上找到log4j2.xml(经常使用的配置)。

  10. 若是找不到配置文件,则将使用DefaultConfiguration。这将致使日志记录输出转到控制台。

  • 日志级别

  1. trace: 字面含义追踪,能够查看程序的一步步推动调用,分析源码时,能够放开,通常不用。

  2. debug: 调试开发时使用。

  3. info: 通常一些须要后台监控的信息。

  4. warn: 有些信息不是错误信息,可是也要给程序员的一些提示。

  5. error: 错误信息。。

  6. fatal: 级别比较高了。重大错误。

    当日志级别设置为某个值的时候,低于它的日志信息将不会被输出到appender中,只有高于设置的级别的信息会被输出到appender中

  • 使用方式

 Logger logger = LogManager.getLogger(xx.class().getName());
  • 经常使用的配置

        配置示例:

        

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

<Configuration>

    <!-- 定义日志输出目录 -->

    <properties>

        <property name="LOG_HOME">${sys:catalina.base}/logs</property>

        <property name="LOG_FILE_NAME">manager</property>

    </properties>

    <Appenders>

        <Console name="Console" target="SYSTEM_OUT">

            <!-- 控制台只输出该level以上级别日志 onMatch符合条件 onMismatch不合符条件-->

            <!--<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>-->

            <!-- 定义日志输出格式 -->

            <PatternLayout pattern="%d %-5p [%c] (%F %L)- %m%n "/>

        </Console>

        <!-- name 声明名称  fileName 当前日志名称 -->

        <RollingRandomAccessFile name="fileLog" fileName="${LOG_HOME}/${LOG_FILE_NAME}.log"

                                 filePattern="${LOG_HOME}/${LOG_FILE_NAME}.%d{yyyy-MM-dd}.log">

            <PatternLayout pattern="%d %-5p [%c] (%F %L)- %m%n "/>

            <Policies>

                <TimeBasedTriggeringPolicy/>

                <SizeBasedTriggeringPolicy size="100MB"/>

            </Policies>

            <DefaultRolloverStrategy max="20"/>

        </RollingRandomAccessFile>

    </Appenders>

    <Loggers>

        <!--&lt;!&ndash; 声明这些包输出的日志级别&ndash;&gt;

        <logger name="org.springframework" level="trace">

            <AppenderRef ref="Console"/>

        </logger>-->

        <!-- 数据库操做单独处理  级别trace 再fileLog输出  additivity 解决重复输出-->

        <logger name="com.test.mapper" level="debug" additivity="false">

            <AppenderRef ref="Console"/>

        </logger>

        <Root level="info">

            <!-- 控制台-->

            <AppenderRef ref="Console"/>

            <!-- 日志目录 -->

            <AppenderRef ref="fileLog"/>

        </Root>

    </Loggers>

</Configuration>

     <appenders>

       标签订义日志输出位置的信息,内部能够定义多种标签如<Console><RollingRandomAccessFile>等来设定不一样的输入位置。几个经常使用的appender标签:

  1. ConsoleAppender:        将日志输出写入System.out或System.err,默认写入System.out

  2. FileAppender、 RollingFileAppender、RandomAccessFileAppender、 RollingRandomAccessFileAppender :将日志写入文件中,

  3. JDBCAppender和JPAAppender:写入关系型数据库中

  4. NoSQLAppender:使用内部轻量级提供程序接口将日志事件写入NoSQL数据库。

  5. SMTPAppender: 发生特定日志记录事件时发送电子邮件,一般是错误或致命错误

 

     <loggers>

       定义了一些必要的logger,logger表明用于输出日志信息的具体对象

  1. <root>标签:root标签设置了一个默认的配置,当输出对象没有匹配的logger对象是,默认采用root配置

  2. 具体的<Logger>标签在默认状况下会继承<root>的全部配置,固然也能够自定义本身的配置,用于设定不一样输出对象

    Filters

     决定日志事件可否被输出。过滤条件有三个值:ACCEPT(接受), DENY(拒绝) or NEUTRAL(中立).

     log4j2规定了四个位置能够设置filter:

  1. 上下文范围的过滤器直接在配置,即Configuration根目录下

  2. Logger标签下

  3. 在一个appender元素。 这些过滤器能够防止或致使事件由追加器处理。

  4. 在追加器引用元素中。 这些过滤器用于肯定记录器是否应将事件路由到追加器。

    比较经常使用的Filter:ThresholdFilter

相关文章
相关标签/搜索