一、Spring Boot 整合 Log4j2日志框架(简单使用)
1、修改Pom.xml依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
2、在resource下新建log4j2.xml文件(默认文件)
控制台输出日志(简单)
<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<Configuration status="WARN" monitorInterval="60">
<!-- 配置 -->
<Properties>
<!-- %d{yyyy-MM-dd HH:mm:ss.SSS}=时间,%-5level=日志等级,${sys:PID}=进程PID,[%t]=线程名称,%l=类、方法、日志行,%msg=消息,%n=换行-->
<Property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${sys:PID} --- [%t] %l ::: %msg%n"/>
<!-- 日志目录-->
<Property name="APP_LOG_ROOT" value="D:\project_log\manage_system\"/>
</Properties>
<Appenders>
<!-- 输出控制台日志的配置 -->
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="${LOG_PATTERN}"/>
</Console>
</Appenders>
<Loggers>
<!-- Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出 -->
<!-- level:日志输出级别,共有8个级别,按照从高到低为:OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<Root level="INFO">
<!-- AppenderRef:用来指定该日志输出到哪个Appender -->
<AppenderRef ref="console"/>
</Root>
</Loggers>
</Configuration>
效果
如果不使用默认名,需要在application.yml内加入如下配置:
logging:
config: classpath:log4j2-dev.xml
二、Log4j2日志框架(入门)官网地址
1、相关文档推荐
Log4j 2.x–Pattern Layout配置详解及示例
log4j2配置属性详解
2、log4j2.xml入门配置。注:滚动配置只有产生日志后,才会触发滚动机制
日志输出到文件中
<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<Configuration status="WARN" monitorInterval="60">
<!-- 配置 -->
<Properties>
<!-- %d{yyyy-MM-dd HH:mm:ss.SSS}=时间,%-5level=日志等级,${sys:PID}=进程PID,[%t]=线程名称,%l=类、方法、日志行,%msg=消息,%n=换行-->
<Property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${sys:PID} --- [%t] %l ::: %msg%n"/>
<!-- 日志目录-->
<Property name="APP_LOG_ROOT" value="D:\project_log\manage_system\"/>
</Properties>
<Appenders>
<!-- 输出控制台日志的配置 -->
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="${LOG_PATTERN}"/>
</Console>
<File name="fileLog" fileName="${APP_LOG_ROOT}/file.log">
<PatternLayout pattern="${LOG_PATTERN}"/>
</File>
</Appenders>
<Loggers>
<!-- Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出 -->
<!-- level:日志输出级别,共有8个级别,按照从高到低为:OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<Root level="INFO">
<!-- AppenderRef:用来指定该日志输出到哪个Appender -->
<AppenderRef ref="console"/>
<AppenderRef ref="fileLog"/>
</Root>
</Loggers>
</Configuration>
日志输出到文件中(按时间间隔滚动,本配置使用的是按秒)
<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<Configuration status="WARN" monitorInterval="60">
<!-- 配置 -->
<Properties>
<!-- %d{yyyy-MM-dd HH:mm:ss.SSS}=时间,%-5level=日志等级,${sys:PID}=进程PID,[%t]=线程名称,%l=类、方法、日志行,%msg=消息,%n=换行-->
<Property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${sys:PID} --- [%t] %l ::: %msg%n"/>
<!-- 日志目录-->
<Property name="APP_LOG_ROOT" value="D:\project_log\manage_system\"/>
</Properties>
<Appenders>
<!-- 输出控制台日志的配置 -->
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="${LOG_PATTERN}"/>
</Console>
<File name="fileLog" fileName="${APP_LOG_ROOT}/file.log">
<PatternLayout pattern="${LOG_PATTERN}"/>
</File>
<!-- 输出info日志到文件(滚动) -->
<RollingFile name="infoLog"
fileName="${APP_LOG_ROOT}/info.log"
filePattern="${APP_LOG_ROOT}/info-%d{yyyy-MM-dd_HH-mm-ss}.log">
<PatternLayout pattern="${LOG_PATTERN}"/>
<!-- 记录INFO以上的日志 -->
<ThresholdFilter level="INFO"/>
<!-- 只记录INFO的日志 -->
<!-- <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>-->
<!-- 指定滚动日志的策略,就是什么时候进行新建日志文件输出日志 -->
<Policies>
<!-- interval属性用来指定多久滚动一次 -->
<TimeBasedTriggeringPolicy interval="1"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<!-- Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出 -->
<!-- level:日志输出级别,共有8个级别,按照从高到低为:OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<Root level="INFO">
<!-- AppenderRef:用来指定该日志输出到哪个Appender -->
<AppenderRef ref="console"/>
<AppenderRef ref="fileLog"/>
<AppenderRef ref="infoLog"/>
</Root>
</Loggers>
</Configuration>
日志输出到文件中(按时间间隔+文件大小滚动,本配置使用的是按秒+KB)
<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<Configuration status="WARN" monitorInterval="60">
<!-- 配置 -->
<Properties>
<!-- %d{yyyy-MM-dd HH:mm:ss.SSS}=时间,%-5level=日志等级,${sys:PID}=进程PID,[%t]=线程名称,%l=类、方法、日志行,%msg=消息,%n=换行-->
<Property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${sys:PID} --- [%t] %l ::: %msg%n"/>
<!-- 日志目录-->
<Property name="APP_LOG_ROOT" value="D:\project_log\manage_system\"/>
</Properties>
<Appenders>
<!-- 输出控制台日志的配置 -->
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="${LOG_PATTERN}"/>
</Console>
<File name="fileLog" fileName="${APP_LOG_ROOT}/file.log">
<PatternLayout pattern="${LOG_PATTERN}"/>
</File>
<!-- 输出info日志到文件(滚动) -->
<RollingFile name="infoLog"
fileName="${APP_LOG_ROOT}/info.log"
filePattern="${APP_LOG_ROOT}/info-%d{yyyy-MM-dd_HH-mm-ss}-%i.log">
<PatternLayout pattern="${LOG_PATTERN}"/>
<!-- 记录INFO以上的日志 -->
<ThresholdFilter level="INFO"/>
<!-- 只记录INFO的日志 -->
<!-- <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>-->
<!-- 指定滚动日志的策略,就是什么时候进行新建日志文件输出日志 -->
<Policies>
<!-- interval属性用来指定多久滚动一次 -->
<TimeBasedTriggeringPolicy interval="5"/>
<!-- 指定大小,超过后创建新文件 -->
<SizeBasedTriggeringPolicy size="1KB"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<!-- Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出 -->
<!-- level:日志输出级别,共有8个级别,按照从高到低为:OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<Root level="INFO">
<!-- AppenderRef:用来指定该日志输出到哪个Appender -->
<AppenderRef ref="console"/>
<AppenderRef ref="fileLog"/>
<AppenderRef ref="infoLog"/>
</Root>
</Loggers>
</Configuration>
日志输出到文件中(保留指定文件数量,使用%i实现)
<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<Configuration status="ALL" monitorInterval="60">
<!-- 配置 -->
<Properties>
<!-- %d{yyyy-MM-dd HH:mm:ss.SSS}=时间,%-5level=日志等级,${sys:PID}=进程PID,[%t]=线程名称,%l=类、方法、日志行,%msg=消息,%n=换行-->
<Property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${sys:PID} --- [%t] %l ::: %msg%n"/>
<!-- 日志目录-->
<Property name="APP_LOG_ROOT" value="D:\project_log\manage_system\"/>
</Properties>
<Appenders>
<!-- 输出控制台日志的配置 -->
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="${LOG_PATTERN}"/>
</Console>
<File name="fileLog" fileName="${APP_LOG_ROOT}/file.log">
<PatternLayout pattern="${LOG_PATTERN}"/>
</File>
<!-- 输出info日志到文件(滚动) -->
<RollingFile name="infoLog"
fileName="${APP_LOG_ROOT}/info.log"
filePattern="${APP_LOG_ROOT}/info-%d{yyyy-MM-dd_HH-mm}-%i.log">
<PatternLayout pattern="${LOG_PATTERN}"/>
<!-- 记录INFO以上的日志 -->
<ThresholdFilter level="INFO"/>
<!-- 只记录INFO的日志 -->
<!-- <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>-->
<!-- 指定滚动日志的策略,就是什么时候进行新建日志文件输出日志 -->
<Policies>
<!-- 指定大小,超过后创建新文件 -->
<SizeBasedTriggeringPolicy size="1KB"/>
</Policies>
<!-- 用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过max属性)-->
<DefaultRolloverStrategy max="5" />
</RollingFile>
</Appenders>
<Loggers>
<!-- Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出 -->
<!-- level:日志输出级别,共有8个级别,按照从高到低为:OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<Root level="INFO">
<!-- AppenderRef:用来指定该日志输出到哪个Appender -->
<AppenderRef ref="console"/>
<AppenderRef ref="fileLog"/>
<AppenderRef ref="infoLog"/>
</Root>
</Loggers>
</Configuration>
日志输出到文件中(保留指定范围内的文件,以下配置保留10s内的日志)
<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<Configuration status="ALL" monitorInterval="60">
<!-- 配置 -->
<Properties>
<!-- %d{yyyy-MM-dd HH:mm:ss.SSS}=时间,%-5level=日志等级,${sys:PID}=进程PID,[%t]=线程名称,%l=类、方法、日志行,%msg=消息,%n=换行-->
<Property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${sys:PID} --- [%t] %l ::: %msg%n"/>
<!-- 日志目录-->
<Property name="APP_LOG_ROOT" value="D:\project_log\manage_system\"/>
</Properties>
<Appenders>
<!-- 输出控制台日志的配置 -->
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="${LOG_PATTERN}"/>
</Console>
<File name="fileLog" fileName="${APP_LOG_ROOT}/file.log">
<PatternLayout pattern="${LOG_PATTERN}"/>
</File>
<!-- 输出info日志到文件(滚动) -->
<RollingFile name="infoLog"
fileName="${APP_LOG_ROOT}/info.log"
filePattern="${APP_LOG_ROOT}/info-%d{yyyy-MM-dd_HH-mm-ss}-%i.log">
<PatternLayout pattern="${LOG_PATTERN}"/>
<!-- 记录INFO以上的日志 -->
<ThresholdFilter level="INFO"/>
<!-- 只记录INFO的日志 -->
<!-- <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>-->
<!-- 指定滚动日志的策略,就是什么时候进行新建日志文件输出日志 -->
<Policies>
<!-- interval属性用来指定多久滚动一次 -->
<TimeBasedTriggeringPolicy interval="2"/>
<!-- 指定大小,超过后创建新文件 -->
<SizeBasedTriggeringPolicy size="1MB"/>
</Policies>
<!-- 用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过max属性)-->
<DefaultRolloverStrategy>
<!-- basePath:目录位置 -->
<!-- maxDepth:要访问的目录的最大级别数。值 0 表示仅访问起始文件(基本路径本身),除非安全管理器拒绝。Integer.MAX_VALUE 的值表示应该访问所有级别。默认值为 1,表示仅指定基目录中的文件。 -->
<Delete basePath="${APP_LOG_ROOT}" maxDepth="1">
<!-- glob:如果未指定正则表达式,则为必需。使用类似于正则表达式但语法更简单的有限模式语言匹配相对路径(相对于基本路径)-->
<IfFileName glob="*\info-*.log"/>
<!-- age:必需的。指定持续时间。该条件接受与指定持续时间一样旧或更早的文件 -->
<!-- https://logging.apache.org/log4j/2.x/log4j-core/apidocs/org/apache/logging/log4j/core/appender/rolling/action/Duration.html#parseCharSequence -->
<IfLastModified age="PT10S"/>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
</Appenders>
<Loggers>
<!-- Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出 -->
<!-- level:日志输出级别,共有8个级别,按照从高到低为:OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<Root level="INFO">
<!-- AppenderRef:用来指定该日志输出到哪个Appender -->
<AppenderRef ref="console"/>
<AppenderRef ref="fileLog"/>
<AppenderRef ref="infoLog"/>
</Root>
</Loggers>
</Configuration>
age配置:
单独指定日志的形式,比如要为指定包下的class指定不同的日志级别
<?xml version="1.0" encoding="UTF-8"?>
<!--日志级别以及优先级排序: OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!--Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出-->
<!--monitorInterval:Log4j能够自动检测修改配置 文件和重新配置本身,设置间隔秒数-->
<Configuration status="ALL" monitorInterval="60">
<!-- 配置 -->
<Properties>
<!-- %d{yyyy-MM-dd HH:mm:ss.SSS}=时间,%-5level=日志等级,${sys:PID}=进程PID,[%t]=线程名称,%l=类、方法、日志行,%msg=消息,%n=换行-->
<Property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level ${sys:PID} --- [%t] %l ::: %msg%n"/>
<!-- 日志目录-->
<Property name="APP_LOG_ROOT" value="D:\project_log\manage_system\"/>
</Properties>
<Appenders>
<!-- 输出控制台日志的配置 -->
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="${LOG_PATTERN}"/>
</Console>
<File name="fileLog" fileName="${APP_LOG_ROOT}/file.log">
<PatternLayout pattern="${LOG_PATTERN}"/>
</File>
<!-- 输出info日志到文件(滚动) -->
<RollingFile name="infoLog"
fileName="${APP_LOG_ROOT}/info.log"
filePattern="${APP_LOG_ROOT}/info-%d{yyyy-MM-dd_HH-mm-ss}-%i.log">
<PatternLayout pattern="${LOG_PATTERN}"/>
<!-- 记录INFO以上的日志 -->
<ThresholdFilter level="INFO"/>
<!-- 只记录INFO的日志 -->
<!-- <ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>-->
<!-- 指定滚动日志的策略,就是什么时候进行新建日志文件输出日志 -->
<Policies>
<!-- interval属性用来指定多久滚动一次 -->
<TimeBasedTriggeringPolicy interval="2"/>
<!-- 指定大小,超过后创建新文件 -->
<SizeBasedTriggeringPolicy size="1MB"/>
</Policies>
<!-- 用来指定同一个文件夹下最多有几个日志文件时开始删除最旧的,创建新的(通过max属性)-->
<DefaultRolloverStrategy>
<!-- basePath:目录位置 -->
<!-- maxDepth:要访问的目录的最大级别数。值 0 表示仅访问起始文件(基本路径本身),除非安全管理器拒绝。Integer.MAX_VALUE 的值表示应该访问所有级别。默认值为 1,表示仅指定基目录中的文件。 -->
<Delete basePath="${APP_LOG_ROOT}" maxDepth="1">
<!-- glob:如果未指定正则表达式,则为必需。使用类似于正则表达式但语法更简单的有限模式语言匹配相对路径(相对于基本路径)-->
<IfFileName glob="*\info-*.log"/>
<!-- age:必需的。指定持续时间。该条件接受与指定持续时间一样旧或更早的文件 -->
<!-- https://logging.apache.org/log4j/2.x/log4j-core/apidocs/org/apache/logging/log4j/core/appender/rolling/action/Duration.html#parseCharSequence -->
<IfLastModified age="PT10S"/>
</Delete>
</DefaultRolloverStrategy>
</RollingFile>
</Appenders>
<Loggers>
<!-- Root节点用来指定项目的根日志,如果没有单独指定Logger,那么就会默认使用该Root日志输出 -->
<!-- level:日志输出级别,共有8个级别,按照从高到低为:OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<Root level="INFO">
<!-- AppenderRef:用来指定该日志输出到哪个Appender -->
<AppenderRef ref="console"/>
<AppenderRef ref="fileLog"/>
<AppenderRef ref="infoLog"/>
</Root>
<!--过滤掉spring和mybatis的一些无用的DEBUG信息-->
<logger name="org.springframework" level="INFO"/>
<logger name="org.mybatis" level="INFO"/>
<!-- Logger节点用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等-->
<!-- level:日志输出级别,共有8个级别,按照从高到低为:OFF > FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL -->
<!-- name:用来指定该Logger所适用的类或者类所在的包全路径,继承自Root节点.-->
<!-- additivity:additivity="false"只在自定义的Appender中进行输出,默认true-->
<Logger name="com.**.config.**CacheScheduler" additivity="false">
<!-- AppenderRef:用来指定该日志输出到哪个Appender,如果没有指定,就会默认继承自Root.如果指定了,那么会在指定的这个Appender和Root的Appender中都会输出。-->
<AppenderRef ref="console"/>
</Logger>
</Loggers>
</Configuration>