springboot log4j配置xml实例说明

提供样本配置代码

java 复制代码
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!-- status log4j2内部日志级别 -->
<configuration status="INFO">
    <!-- 全局参数 -->
    <Properties>
        <Property name="springName">demo</Property>
        <Property name="pattern">
            {"time":"%d{yyyy-MM-dd HH:mm:ss.SSS}","level":"%level","service":"${springName}","class":"%C{1.}","thread":"%thread","trace":"[%X{traceId},%X{parentSpanId},%X{spanId}]","uri":"%X{URI}","device-type":"%X{DT}","source-type":"%X{ST}","uid":"%X{UID}","msg":"%msg"}%n
        </Property>
    </Properties>
    <Appenders>
        
        <RollingFile name="error" fileName="/home/logs/${springName}/err.log"
                     filePattern="/home/logs/${springName}/%d{yyyy-MM-dd}/err-%i.log" append="true">
           
            <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/>
            <PatternLayout>
                <pattern>${pattern}</pattern>
            </PatternLayout>
            <Policies>
                
                <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
               
                <SizeBasedTriggeringPolicy size="30MB"/>
            </Policies>
            <DefaultRolloverStrategy>
                <Delete basePath="/home/logs/${springName}/" maxDepth="2">
                    <IfFileName glob="err-*" />
                    <IfLastModified age="15d" />
                </Delete>
            </DefaultRolloverStrategy>
            
            <DefaultRolloverStrategy max="30"/>
        </RollingFile>
       
        <RollingFile name="rollingFile" fileName="/home/logs/${springName}/demo.log"
                     filePattern="/home/logs/${springName}/%d{yyyy-MM-dd}/log-%i.log" append="true">
            <PatternLayout>
                <pattern>${pattern}</pattern>
            </PatternLayout>
            <Policies>
              
                <TimeBasedTriggeringPolicy modulate="true" interval="1"/>
                <SizeBasedTriggeringPolicy size="10MB"/>
            </Policies>
          
            <DefaultRolloverStrategy max="50"/>
        </RollingFile>
    </Appenders>
    <Loggers>
        <Logger name="org.springframework" level="warn"/>
        <Logger name="com.cc" level="info"/>
        <Logger name="com.ap" level="DEBUG"/>
        <Root level="info">
            <AppenderRef ref="console"/>
            <AppenderRef ref="error"></AppenderRef>
            <AppenderRef ref="rollingFile"></AppenderRef>
        </Root>
    </Loggers>
</configuration>

``

配置说明

Log4j有三个主要的组件:

Loggers(记录器):日志类别和级别

Appenders(输出目标):日志要输出到的地方

Layouts(布局):日志以何种形式输出

Propertiess说明

Properties全局参数

可以定义springName和pattern格式,全局使用。

Loggers组件

Loggers组件在此系统中被分为五个级别:DEBUG、INFO、WARN、ERROR和FATAL。这五个级别是有顺序的,DEBUG < INFO < WARN < ERROR < FATAL,分别用来指定这条日志信息的重要程度,明白这一点很重要!

Log4j有一个规则:只输出级别不低于设定级别的日志信息,假设Loggers级别设定为INFO,则INFO、WARN、ERROR和FATAL级别的日志信息都会输出,而级别比INFO低的DEBUG则不会输出。

Appenders配置

禁用和使用日志请求只是Log4j的基本功能,Log4j日志系统还提供了许多强大的功能,比如允许把日志输出到不同的地方,如控制台(Console)、文件(Files)等,可以根据天数或者文件大小产生新的文件,可以以流的形式发送到其它地方等等。

java 复制代码
<Console>(控制台)
<File>(文件)
<DailyRollingFile>(每天产生一个日志文件)
<RollingFile>(文件大小到达指定尺寸的时候产生一个新的文件)
<Writer>(将日志信息以流格式发送到任意指定的地方)

ThresholdFilter指定级别

Layouts配置

Log4j可以在Appenders的后面附加Layouts来完成这个功能。

Layouts提供四种日志输出样式,如根据HTML样式、自由指定样式、包含日志级别与信息的样式和包含日志时间、线程、类别等信息的样式。

常使用的类如下:

(以HTML表格形式布局)

(可以灵活地指定布局模式)

(包含日志信息的级别和信息字符串)

(包含日志产生的时间、线程、类别等信息)

PatternLayout选项

java 复制代码
 {"time":"%d{yyyy-MM-dd HH:mm:ss.SSS}","level":"%level","service":"${springAppName}","class":"%C{1.}","thread":"%thread","trace":"[%X{traceId},%X{parentSpanId},%X{spanId}]","uri":"%X{URI}","device-type":"%X{DT}","source-type":"%X{ST}","uid":"%X{UID}","msg":"%msg"}%n

格式说明如下:

%p:输出日志信息的优先级,即DEBUG,INFO,WARN,ERROR,FATAL。

%d:输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,如:%d{yyyy/MM/dd HH:mm:ss,SSS}。

%r:输出自应用程序启动到输出该log信息耗费的毫秒数。

%t:输出产生该日志事件的线程名。

%l:输出日志事件的发生位置,相当于%c.%M(%F:%L)的组合,包括类全名、方法、文件名以及在代码中的行数。例如:test.TestLog4j.main(TestLog4j.java:10)。

%c:输出日志信息所属的类目,通常就是所在类的全名。

%M:输出产生日志信息的方法名。

%F:输出日志消息产生时所在的文件名称。

%L:输出代码中的行号。

%m:输出代码中指定的具体日志信息。

%n:输出一个回车换行符,Windows平台为"\r\n",Unix平台为"\n"。

%x:输出和当前线程相关联的NDC(嵌套诊断环境),尤其用到像Java Servlets这样的多客户多线程的应用中。

%%:输出一个"%"字符。

另外,还可以在%与格式字符之间加上修饰符来控制其最小长度、最大长度、和文本的对齐方式。如:

%20c:指定输出category的名称,最小的长度是20,如果category的名称长度小于20的话,默认的情况下右对齐。

%-20c:"-"号表示左对齐。

%.30c:指定输出category的名称,最大的长度是30,如果category的名称长度大于30的话,就会将左边多出的字符截掉,但小于30的话也不会补空格。

Policies策略

基于时间的触发策略。 interval,integer型,指定两次封存动作之间的时间间隔。单位:以日志的命名(filePattern)精度来确定单位,比如yyyy-MM-dd-HH单位为小时,yyyy-MM-dd-HH-mm单位为分钟 modulate,boolean型,说明是否对封存时间进行调制。若modulate=true,以0为边界封存 每文件最大字节 用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过max属性)。

相关推荐
RainbowSea2 分钟前
问题:后端由于字符内容过长,前端展示精度丢失修复
java·spring boot·后端
风象南18 分钟前
SpringBoot 控制器的动态注册与卸载
java·spring boot·后端
我是一只代码狗1 小时前
springboot中使用线程池
java·spring boot·后端
hello早上好1 小时前
JDK 代理原理
java·spring boot·spring
PanZonghui1 小时前
Centos项目部署之运行SpringBoot打包后的jar文件
linux·spring boot
沉着的码农2 小时前
【设计模式】基于责任链模式的参数校验
java·spring boot·分布式
zyxzyx6662 小时前
Flyway 介绍以及与 Spring Boot 集成指南
spring boot·笔记
一头生产的驴3 小时前
java整合itext pdf实现自定义PDF文件格式导出
java·spring boot·pdf·itextpdf
程序员张36 小时前
SpringBoot计时一次请求耗时
java·spring boot·后端
麦兜*12 小时前
Spring Boot启动优化7板斧(延迟初始化、组件扫描精准打击、JVM参数调优):砍掉70%启动时间的魔鬼实践
java·jvm·spring boot·后端·spring·spring cloud·系统架构