zoukankan      html  css  js  c++  java
  • log4j2 配置文件解读

    1、日志相关介绍

      日志接口(slf4j):slf4j是对所有日志框架制定的一种规范、标准、接口,并不是一个框架的具体的实现,因为接口并不能独立使用,需要和具体的日志框架实现配合使用,比如log4j、logback等日志框架。常用的日志框架有log4j、logback、log4j2,log4j是apache实现的一个开源日志组件;logback同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4j的一个日志框架,是slf4j的原生实现;log4j2是log4j 1.x和logback的改进版,据说采用了一些新技术(无锁异步、等等),使得日志的吞吐量、性能比log4j 1.x提高很多,并解决了一些死锁的bug,而且配置更加简单灵活。以下以log4j2 xml配置文件为例。

    2、log4j2.xml文件内容如下

    <?xml version="1.0" encoding="utf-8"?>
    <!-- log4j2内部日志配置,status表示日志级别,monitorInterval表示监控间隔 -->
    <Configuration status="WARN" monitorInterval="10">
        <!-- 属性配置,后续可以使用${xxx}获取对应的值 -->
        <properties>
            <!-- 日志存放根目录 -->
            <property name="LOG_HOME">logs</property>
            <!-- 文件名配置 -->
            <property name="FILE_NAME">adapter_service_log</property>
        </properties>
        <!-- 日志附加器配置 -->
        <Appenders>
            <!-- 控制台输出配置 -->
            <Console name="Console" target="SYSTEM_OUT">
                <!-- 控制台输出格式结构配置 -->
                <!-- https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout -->
                <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
            </Console>
            <!-- 日志访问文件配置,filePattern表示压缩日志文件的文件名的模式,.gz会自动压缩 -->
            <RollingRandomAccessFile name="RollingFile"
                fileName="${LOG_HOME}/${FILE_NAME}.log"
                filePattern="${LOG_HOME}/$${date:yyyy-MM}/${FILE_NAME}-%d{yyyy-MM-dd}-%i.log.gz">
                <!-- 日志文件格式配置 -->
                <PatternLayout
                    pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" />
                <!-- 策略配置 -->
                <Policies>
                    <!-- 基于时间的触发策略。该策略主要是完成周期性的log文件封存工作。有两个参数:
                    interval,integer型,指定两次封存动作之间的时间间隔。单位:以日志的命名精度来确定单位,
                        比如yyyy-MM-dd-HH 单位为小时,yyyy-MM-dd-HH-mm 单位为分钟
                    modulate,boolean型,说明是否对封存时间进行调制。若modulate=true,
                        则封存时间将以0点为边界进行偏移计算。比如,modulate=true,interval=4hours,
                        那么假设上次封存日志的时间为03:00,则下次封存日志的时间为04:00,
                        之后的封存时间依次为08:00,12:00,16:00-->
                    <TimeBasedTriggeringPolicy interval="1"  modulate="true" />
                    <!-- 基于日志大小的触发策略,最大100MB-->
                    <SizeBasedTriggeringPolicy size="100 MB" />
                </Policies>
                <!-- 默认的文件大小处理策略,max表示filePattern配置的%i的最大值,即表示当天文件归档的最大数量 -->
                <DefaultRolloverStrategy max="30">
                    <!-- 删除处理策略,在配置的路径中搜索,maxDepth表示往下搜索的最大深度 -->
                    <Delete basePath="${LOG_HOME}/$${date:yyyy-MM}/" maxDepth="2">
                        <!-- 文件名搜索匹配,支持正则 -->
                        <IfFileName glob="*.log.gz" />
                        <!-- 最新修改时间超过7d则会被删除 -->
                        <IfLastModified age="7d" />
                    </Delete>
                </DefaultRolloverStrategy>
            </RollingRandomAccessFile>
        </Appenders>
     
        <Loggers>
            <Root level="info">
                <AppenderRef ref="Console" />
                <AppenderRef ref="RollingFile" />
            </Root>
        </Loggers>
    </Configuration>

    3、pattern格式

    • %c{参数} 或 %logger{参数} ##输出日志名称
    • %C{参数} 或 %class{参数 ##输出类型
    • %d{参数}{时区te{参数}{时区} ##输出时间
    • %F|%file ##输出文件名
    • highlight{pattern}{style} ##高亮显示
    • %l ##输出错误的完整位置
    • %L ##输出错误行号
    • %m 或 %msg 或 %message ##输出错误信息
    • %M 或 %method ##输出方法名
    • %n ##输出换行符
    • %level{参数1}{参数2}{参数3} ##输出日志的级别
    • %t 或 %thread ##创建logging事件的线程名

      pattern对齐修饰

    • %20 —— 右对齐,不足20个字符则在信息前面用空格补足,超过20个字符则保留原信息
    • %-20 —— 左对齐,不足20个字符则在信息后面用空格补足,超过20个字符则保留原信息
    • %.30 —— 如果信息超过30个字符,则只保留最后30个字符
    • %20.30 —— 右对齐,不足20个字符则在信息前面用空格补足,超过30个字符则只保留最后30个字符
    • %-20.30 —— 左对齐,不足20个字符则在信息后面用空格补足,超过30个字符则只保留最后30个字符

    参考:

    http://logging.apache.org/log4j/2.x/manual/appenders.html#RollingFileAppender

    https://logging.apache.org/log4j/2.x/manual/layouts.html#PatternLayout

  • 相关阅读:
    使用多线程生产者消费者模式实现抓斗图
    selenium+chrome抓取淘宝搜索抓娃娃关键页面
    mysql必知必会
    mongoDB高级查询$type4array使用解析
    并发服务器几种实现方法总结
    python的面向对象和面向过程
    lazarus,synedit输入小键盘特殊符号的补丁
    Delphi中静态方法重载还是覆盖的讨论
    python全栈开发_day4_if,while和for
    python全栈开发_day3_数据类型,输入输出及运算符
  • 原文地址:https://www.cnblogs.com/kingsonfu/p/11869100.html
Copyright © 2011-2022 走看看