首页 > 其他分享 >log4j配置文件详解

log4j配置文件详解

时间:2022-10-17 18:01:38浏览次数:100  
标签:20 配置文件 详解 长度 对齐 日志 级别 log4j 个字符

【参考文章】: Log4j2中RollingFile的文件滚动更新机制

1. 配置文件示例

<?xml version="1.0" encoding="UTF-8"?>
<!-- ALL < TRACE< DEBUG < INFO < WARN < ERROR < FATAL < OFF -->
<!-- status: log4j本身的日志信息级别 -->
<Configuration status="OFF">
    <!-- 配置变量,可以在下面通过变量名进行引用 -->
    <Properties>
        <Property name="BaseDir">logs</Property>
        <Property name="LogName">info</Property>
        <Property name="LogExtensionName">gz</Property>
    </Properties>
    <Appenders>
        <!-- 日志写入文件 -->
        <RollingFile
                name="RollingFile"
                fileName="${BaseDir}/${LogName}.${LogExtensionName}"
                filePattern="${BaseDir}/$${date:yyyy-MM}/logs-%d{yyyy-MM-dd-HH}-%i.${LogExtensionName}.gz"
        >
            <!-- 日志信息格式 -->
            <PatternLayout pattern="[%d{yyyy-MM-dd HH:mm:ss}] [%t] [%p] %c{1}.%M [%L] %m%n"/>
            <!-- 判断哪些级别的日志可以写入该文件 -->
            <Filters>
                <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
                <ThresholdFilter level="trace" onMatch="ACCEPT" onMismatch="DENY"/>
            </Filters>
            <!-- 触发策略,决定何时触发文件的压缩, 满足下面任意一个条件都会触发压缩 -->
            <Policies>
                <!-- filePattern 中的最小粒度为单位, 每隔 interval 个单位时间压缩一次 -->
                <!-- 比如: yyyy-MM-dd-HH, 则每隔5个小时压缩一次 -->
                <TimeBasedTriggeringPolicy interval="5"/>
                <!-- 文件大小超过500MB时压缩日志文件 -->
                <SizeBasedTriggeringPolicy size="500MB"/>
            </Policies>
            <!--
                max参数是与filePattern中的计数器%i配合使用,根据filePattern的不同max的含义也不同
                1. 如果filePattern没有%i,则max不会生效
                2. 如果filePattern没有时间格式,有%i, 文件个数达到max, 则会删除旧的日志文件
                3. 如果filePattern有时间格式,有%i, 则时间格式相同时,文件个数达到max,则会删除旧的日志文件
                例如 %d{yyyy-MM-dd-HH}, 如果某个小时的文件个数大于max,则会删除这个小时内的旧的日志文件
            -->
            <DefaultRolloverStrategy max="7">
                <!-- 删除策略 -->
                <!-- maxDepth=2: 表示该策略会应用于BaseDir子目录下的日志文件 -->
                <Delete basePath="${BaseDir}" maxDepth="2">
                    <!-- 下面的文件名策略,文件最新的修改时间策略,文件大小策略,文件个数策略都可以进行组合使用 -->
                    <!-- IfAny 表示或, IfAll 表示与 -->
                    <!-- 如果filePattern中包含时间格式,则IfFileName策略会按照时间格式维度进行判断 -->
                    <!--
                        例如时间格式为%d{yyyy-MM-dd-HH},以2022-10-01-12的文件为例
                        info-2022-10-10-12-1.log.gz
                        info-2022-10-10-12-2.log.gz
                        info-2022-10-10-12-3.log.gz
                        info-2022-10-10-12-4.log.gz
                        1. 将2022-10-01-12的所有文件进行一次逻辑判断
                        2. 如果文件都超过30天未修改
                        3. 满足下面两个任意一个条件即可删除
                        3.1 2022-10-01-12文件总大小大于5GB
                        3.2 2022-10-01-12文件总个数大于3个
                    -->
                    <IfFileName glob="*/${LogName}-*.${LogExtensionName}.gz">
                        <IfLastModified age="30d">
                            <IfAny>
                                <IfAccumulatedFileSize exceeds="5GB"/>
                                <IfAccumulatedFileCount exceeds="3"/>
                            </IfAny>
                        </IfLastModified>
                    </IfFileName>
                </Delete>
                <!-- maxDepth=1: 表示该策略会应用于BaseDir目录下的日志文件 -->
                <Delete basePath="${BaseDir}" maxDepth="1">
                    <IfLastModified age="10d" />
                </Delete>
            </DefaultRolloverStrategy>
        </RollingFile>

        <!-- 输出到控制台的日志信息 -->
        <Console name="console" target="SYSTEM_OUT">
            <ThresholdFilter level="INFO"/>
            <PatternLayout pattern="[%d{yyyy-MM-dd-HH:mm:ss}] [%-15t] [%-5p] - %-35C{1} %M - %m%n"/>
        </Console>
    </Appenders>

    <Loggers>
        <Root level="INFO">
            <AppenderRef ref="RollingFile"/>
            <AppenderRef ref="console"/>
        </Root>
    </Loggers>
</Configuration>

2. 注意事项

1. PatternLayout

1. 模式字符含义

    %d: 日志产生时间
    %t: thread id当前线程ID
    %p: priority日志优先级(DEBUG、INFO、WARN……)
    %F: 日志所在文件名
    %c: logger的名称
    %C: 日志请求的完全限定类名(例如类名为com.skd.demo.App, %C{1} 会输出App)
    %M: 日志所在方法名
    %L: 日志语句所在的行号
    %m: 日志内容
    %n: 换行符

2. 格式修饰符

        以%M为例:
        %20M: 右对齐,如果方法名长度小于20个字符,则用空格在左边补齐
       %-20M: 左对齐,如果方法名长度小于20个字符,则用空格在右边补齐
       %.20M: 左对齐,如果方法名长度大于20个字符,则保留右边的20个字符
     %20.30M: 右对齐,如果方法名长度小于20个字符,则用空格在左边补齐; 如果长度大于30,则保留右边的30个字符
    %-20.30M: 左对齐,如果方法名长度小于20个字符,则用空格在右边补齐; 如果长度大于30,则保留左边的30个字符

2. ThresholdFilter

    onMatch="ACCEPT" 表示匹配该级别及以上
    onMatch="DENY" 表示不匹配该级别及以上
    onMatch="NEUTRAL" 表示该级别及以上的,由下一个filter处理,如果当前是最后一个,则表示匹配该级别及以上
    onMismatch="ACCEPT" 表示匹配该级别以下
    onMismatch="NEUTRAL" 表示该级别及以下的,由下一个filter处理,如果当前是最后一个,则不匹配该级别以下的
    onMismatch="DENY" 表示不匹配该级别以下的

标签:20,配置文件,详解,长度,对齐,日志,级别,log4j,个字符
From: https://www.cnblogs.com/virgosnail/p/16800078.html

相关文章

  • jquery animate()方法 动画详解(超简单易懂)
    jqueryanimate动画详解(超简单易懂)animate()方法是jquery里的动画效果,通过修改css相关属性,在规定时间内,值是不断变化的从而形成了一种动画的效果。(selector).animate({style......
  • CSS3 positon定位详解(通俗易懂)
    CSS3positon定位详解(通俗易懂),文章内包涵很多个人理解(错误请指出)positon定位一共有四种,分别是static静态(默认),relative相对,fixed固定,absolute绝对定位,以及sticky粘性定位。st......
  • CSS3 Z—Index 详解
    CSS3  Z—Index详解 z-index属性规定元素的堆叠顺序,值越高就会显示在上面。无定位<style>.div0{height:80px;width:100px;......
  • 【css高级】变量详解
    ❤️文章内包含个人理解,如有错误请指出。 ❤️​目录​​前言​​​​定义变量​​​​使用变量​​​​​​​​​​特别注意点​​​​        字符连接​​......
  • Java基础(八)| 常用API与StringBuilder详解
    ⭐本专栏旨在对JAVA的基础语法及知识点进行全面且详细的讲解,完成从0到1的java学习,面向零基础及入门的学习者,通过专栏的学习可以熟练掌握JAVA编程,同时为后续的框架学习,进阶开......
  • Vue3中 响应式 API ( readonly、shallowReadonly、toRaw、markRaw ) 详解
    1.readonly函数接受一个对象(不论是响应式还是普通的)或是一个ref,返回一个原值的只读代理。只读代理是深层的:对任何嵌套属性的访问都将是只读的。它的ref解包行为......
  • JDBC各个类详解_ResultSet基本使用和ResultSet遍历结果集
    ResultSet:结果集对象,封装查询结果 *booleannext():游标向下移动一行,判断当前行是否是最后一行末尾(是否有数据),如果是,则返回false,如果不是则返回true *get......
  • Python3爬虫中Selenium的用法详解
    Selenium是一个自动化测试工具,利用它可以驱动浏览器执行特定的动作,如点击、下拉等操作,同时还可以获取浏览器当前呈现的页面的源代码,做到可见即可爬。对于一些JavaScript动......
  • 软件工程导论课程笔记与详解①
    前言:本课程真的就是讲述整个软件工程行业全部流程和所需的所有技术要点,可以说是程序员入门终极指南(笑)。对于未来想要做程序员的宝子十分重要。  课程信息:所用教材:......
  • 【实战加详解】二进制部署k8s高可用集群教程系列一 - 前言
    [!TIP]二进制部署k8s高可用集群转载请注明出处:https://janrs.com。有任何问题环境来我的博客评论区发表评论。超详细的二进制部署k8s教程文章。使用灵活强大的......