我是靠谱客的博主 贪玩画笔,最近开发中收集的这篇文章主要介绍log4j2学习,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

log4j2学习

    • 1.前言
    • 2.导入log4j的依赖
    • 3.Log4j配置
    • 4.配置模板

1.前言

众所周知,最近log4j被测出了漏洞,先是log4j2被测出了漏洞,漏洞影响范围为Log4j2.x <= 2.14.1;后来又被测出log4j1.X也有漏洞,范围为整个1.X版本。我们项目中,用的是log4j1.x。所以,结合以上两个漏洞,我们项目中只能把log4j升级到2.X版本,最终确定版本为2.17.2。

2.导入log4j的依赖

<!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-core -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.17.2</version>
</dependency>

3.Log4j配置

缺省默认配置文件

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
   <Appenders>
     <Console name="Console" target="SYSTEM_OUT">
       <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
     </Console>
   </Appenders>
   <Loggers>
     <Root level="error">
       <AppenderRef ref="Console"/>
     </Root>
   </Loggers>
</Configuration>

配置文件节点说明

  1. 根节点Configuration:有 Appenders 和 Loggers 两个子节点。

    • status:用来指定log4j本身打印日志的级别,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出。
    • monitorinterval:用于指定 log4j 自动重新配置的监测间隔时间,单位是秒(s),最小的间隔时间是5s
  2. Appenders 节点

    有常见的 Console、RollingFile、File 三种子节点。

    1. Console:用于定义输出到控制台的 Appender。
      • name:指定 Appender 的名字。
      • target:SYSTEM_OUTSYSTEM_ERR,一般只设置默认:SYSTEM_OUT。
      • PatternLayout:输出格式,不设置默认为 %m%n。
    2. File:用于定义输出到指定位置的文件的 Appender。
      • name:指定 Appender 的名字。
      • fileName:指定输出日志的目的文件带全路径的文件名。
      • PatternLayout:输出格式,不设置默认为 %m%n。
    3. RollingFile:定义指定方式触发新的 Appender。
      • name:Appender 名字。
      • fileName:输出日志文件的名字(带全路径)。
      • filePattern:归档日志文件的文件名模式。
      • PatternLayout:输出格式,不设置默认为:%m%n。
      • Policies:指定滚动日志的策略。
      • TimeBasedTriggeringPolicy:Policies 子节点,基于时间的滚动策略。interval 属性根据日期模式中最具体的时间单位进行翻转的频率,默认为1。
      • SizeBasedTriggeringPolicy:Policies 子节点,基于文件大小的滚动策略。size属性用来定义每个日志文件的大小。大小可以以字节为单位指定,后缀为KB,MB或GB,例如20MB。
      • DefaultRolloverStrategy:用来指定同一文件夹最多有几个日志文件时开始删除最旧的,创建新的(通过max属性)。
  3. Loggers 节点

    常见的有 Root 和 Logger 两种节点。

    1. Root:指定项目的根日志,如果没有单独指定 Logger,那么默认使用该 Root 日志输出。
      • level:日志的输出级别,共8个级别,按照从低到高为 All < Trace < Debug < Info < Warn < Error < Fatal < OFF。
      • AppenderRef:Root 的子节点,用来指定该日志输出到哪个 Appender。
    2. Logger:用来单独指定日志的形式。
      • level:日志的输出级别,与 Root 一致。
      • name:用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点。
      • AppenderRef:Logger的子节点,用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root.如果指定了,那么会在指定的这个Appender和Root的Appender中都会输出,此时我们可以设置Logger的additivity="false"只在自定义的Appender中进行输出。

4.配置模板

<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
    <!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->

    <Properties>
        <Property name="App">Spring5</Property>
        <Property name="logDir">logs</Property>
        <Property name="splitSize">10 MB</Property>
    </Properties>

    <appenders>
        <!-- 输出控制台日志的配置 -->
        <Console name="console" target="SYSTEM_OUT">
            <!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
            <ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
            <!-- 输出日志的格式 -->
            <!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
            <!-- %logger{36} 表示 Logger 名字最长36个字符 -->
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
        </Console>

        <!-- 打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
        <RollingFile name="infoLog" fileName="${logDir}/${App}-info.log"
                     filePattern="${logDir}/${App}-info-%d{yyyy-MM-dd}-%i.log.gz">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS z} [%thread] %-5level %logger{36} %L %M - %msg%xEx%n"/>
            <Policies>
                <!--interval属性用来指定多久滚动一次,默认是1, 单位到底是月 天 小时 分钟,根据filePattern配置的日期格式而定,本处的格式为天,则默认为1天-->
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <!--按大小分-->
                <SizeBasedTriggeringPolicy size="${splitSize}"/>
            </Policies>
            <!-- 指定每天的最大压缩包个数,默认7个,超过了会覆盖之前的 -->
            <DefaultRolloverStrategy max="1000"/>
        </RollingFile>

        <!-- 存储所有error信息 -->
        <RollingFile name="errorLog" fileName="${logDir}/${App}-error.log"
                     filePattern="${logDir}/${App}-error-%d{yyyy-MM-dd}-%i.log.gz">
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS z} [%thread] %-5level %logger{36} %L %M - %msg%xEx%n"/>
            <Policies>
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
                <SizeBasedTriggeringPolicy size="${splitSize}"/>
            </Policies>
            <Filters>
                <!-- 只记录error级别信息 -->
                <ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <DefaultRolloverStrategy max="1000"/>
        </RollingFile>
    </appenders>

    <loggers>
        <!-- root logger 配置,全局配置,默认所有的Logger都继承此配置 -->
        <!-- AsyncRoot - 异步记录日志 - 需要LMAX Disruptor的支持 -->
        <Root level="all">
            <AppenderRef ref="infoLog"/>
            <AppenderRef ref="errorLog"/>
            <AppenderRef ref="console"/>
        </Root>
    </loggers>
</configuration>

最后

以上就是贪玩画笔为你收集整理的log4j2学习的全部内容,希望文章能够帮你解决log4j2学习所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(238)

评论列表共有 0 条评论

立即
投稿
返回
顶部