注:SpringBoot版本 2.0.3.RELEASE,项目管理工具maven
SpringBoot 默认使用logback日志,默认日志级别info
pom 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
spring-boot-starter-logging依赖已经被包含spring-boot-starter依赖中,而spring-boot-starter依赖又被包含在每个以“spring-boot-starter”开头的依赖中。所以已经配了其它以“spring-boot-starter”开头的依赖,则不需要配上面的pom依赖。
application.properties
# 指定日志文件路径名(包含日志文件名)
logging.file
# 指定日志文件路径名(不包含日志文件名)
logging.path
# 日志八级别,ALL、TRACE(链路)、DEBUG(调试)、INFO(信息)、WARN(警告)、ERROR(异常)、FATAL(致命)、OFF
logging.level
# 默认加载一些名字的配置,其中包含logback-spring.xml、log4j2-spring.xml等;如果名字自定义,可以通过该属性指定日志xml路径(用于更复杂、具体的日志要求);
logging.config
# 设置一个日志文件存储上限
logging.file.max-size
logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
scan: 当此属性设置为true时,配置文件如果发生改变将会被重新加载 (默认值为true).
scanPeriod: scan为true的前提下,用于设置监测配置文件是否有修改的时间间隔 (默认的时间间隔为1分钟,默认单位为毫秒).
debug: 当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态 (默认值为false).
-->
<configuration scan="true" scanPeriod="60 seconds" debug="false">
<!--
定义变量
name: 变量名
value: 值
-->
<property name="logPath" value="E:\\logs" />
<!-- 上下文的名字 (默认default) -->
<contextName>myContextName</contextName>
<!--
输出到控制台的appender
name: appender的名字
class: 所要使用的类
-->
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<!--
encoder
class: 默认使用ch.qos.logback.classic.encoder.PatternLayoutEncoder
-->
<encoder>
<!-- 日志格式 -->
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{5}[%file:%line] %msg%n</pattern>
<!-- 字符集 -->
<charset>UTF-8</charset>
</encoder>
</appender>
<!--
输出到日志文件的appender(能够滚动的,滚动就是指能够根据策略记录成多份日志文件,而不是一份庞大的日志文件).
name: appender的名字
class: 所要使用的类
-->
<appender name="RollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<!-- 日志文件是否追加日志信息(默认true) -->
<append>true</append>
<!--
滚动策略
class: TimeBasedRollingPolicy 根据时间来分;
FixedWindowRollingPolicy 根据窗口数量来分;
SizeAndTimeBasedRollingPolicy 根据日志文件大小和时间来分.
-->
<!--<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">-->
<!--<!– 文件路径名. %d{yyyy-MM-dd}表示时间格式,这种格式表示按天分;%d{yyyy-MM}这种格式表示按月分.以此类推. –>-->
<!--<fileNamePattern>E:\\logs\logFile.%d{yyyy-MM-dd}.zip</fileNamePattern>-->
<!--<!– 日志文件保存时间. 若按天分,这里就表示30天;按月分,这里就表示30个月. –>-->
<!--<maxHistory>30</maxHistory>-->
<!--</rollingPolicy>-->
<!--
FixedWindowRollingPolicy 策略
需要 <file>、<triggeringPolicy>节点
窗口数不够的话会覆盖最新的窗口......
-->
<!--<file>${logPath}\test.log</file>-->
<!--<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">-->
<!--<!– 文件路径名.必须包含%i,否则报错 –>-->
<!--<fileNamePattern>${logPath}\logFile.%i.log.zip</fileNamePattern>-->
<!--<!– 起始 –>-->
<!--<minIndex>2</minIndex>-->
<!--<!– 截止 –>-->
<!--<maxIndex>3</maxIndex>-->
<!--</rollingPolicy>-->
<!--<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">-->
<!--<!– 设置日志文件上限(这里的大小是文件打包后的大小) –>-->
<!--<maxFileSize>1KB</maxFileSize>-->
<!--</triggeringPolicy>-->
<!--
SizeAndTimeBasedRollingPolicy 策略
-->
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
<fileNamePattern>${logPath}\logFile.%d{yyyy-MM-dd}.%i.log.zip</fileNamePattern>
<maxFileSize>1KB</maxFileSize>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{5}[%file:%line] %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
<!--
过滤器,用于过滤一些不需要的日志,可以配置多个过滤器.
LevelFilter: 与过滤的日志级别相等的日志才会过滤. 本例中只有warn级别过滤.(=)
ThresholdFilter: 大于等于过滤的日志级别的日志才会过滤. 本例中只有warn级别以上的过滤.(>=)
EvaluatorFilter: 复杂的过滤条件可以使用这个,使用<evaluator>节点替换<level>节点,使用提供的鉴别器表达式实现复杂过滤
-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<!-- 过滤的日志级别 -->
<level>INFO</level>
<!--
符合过滤条件后能做的操作用三种,分别是ACCEPT(自己处理不会传递给后面的过滤器)、NEUTRAL(处理好交给后面的过滤器)、DENY(不处理也不交给后面的过滤器)
注: ThresholdFilter不具备下面两个节点,匹配直接NEUTRAL.
-->
<!--<onMatch>ACCEPT</onMatch>-->
<!--<onMismatch>DENY</onMismatch>-->
</filter>
<!-- prudent: 如果是true,日志会被安全的写入文件,即使其他的FileAppender也在向此文件做写入操作,效率低(默认是 false) -->
<!--<prudent></prudent>-->
</appender>
<!--
logger
level: 用来设置打印级别,未设置则继承上级
name: 该logger负责的区域
additivity: 是否向上级传递收集到的日志(默认false)
-->
<logger level="INFO" name="com.sen.ultimate.UltimateApplicationTests" additivity="false">
<!-- 使用的appender,表示该logger自己会进行日志处理操作. -->
<appender-ref ref="RollingFile"/>
</logger>
<!--
rootLogger (顶级的logger)
level: 日志级别(默认是DEBUG)
-->
<root level="INFO">
<appender-ref ref="Console" />
<appender-ref ref="RollingFile" />
</root>
</configuration>
* log4j2
pom依赖调整
<!--
排除starter 依赖自带的logback
注:在第一个starter 依赖中加上这段,否则无效
-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
<!-- 引入log4j2依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
log4j2-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--
status: 显示log4j2内部日志打印级别
monitorInterval: 设置监测配置文件修改的间隔时间,默认单位是s,最短间隔为5s
-->
<configuration status="warn" monitorInterval="30">
<properties>
<property name="logPath">E:\\logs</property>
</properties>
<appenders>
<!--
name: 标识
target: SYSTEM_OUT 或 SYSTEM_ERR(用于输出异常)
-->
<console name="Console" target="SYSTEM_OUT">
<!--
符合过滤条件后能做的操作用三种,分别是ACCEPT(自己处理不会传递给后面的过滤器)、NEUTRAL(处理好交给后面的过滤器)、DENY(不处理也不交给后面的过滤器)
ThresholdFilter: 大于等于过滤的日志级别的日志才会过滤. (>=)
level: 过滤的日志级别
onMatch: 匹配成功后的操作
onMismatch: 匹配失败后的操作
-->
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 日志输出的格式 -->
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{5}[%file:%line] %msg%n"/>
</console>
<!--
name: 标识
fileName: 日志文件存储路径
append: 日志文件是否追加日志信息(默认true)
-->
<File name="File" fileName="${logPath}/FileAppender/file-output.log" append="false">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{5}[%file:%line] %msg%n"/>
</File>
<!--
name: 标识
fileName: 日志文件存储路径和文件名
filePattern: Rolling的时候文件转移路径
-->
<RollingFile name="RollingFile" fileName="${logPath}/output.log"
filePattern="${logPath}/$${date:yyyy-MM-dd}/output-%d{yyyy-MM-dd HH}.%i.log.zip">
<Filters>
<ThresholdFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/>
<ThresholdFilter level="WARN" onMatch="DENY" onMismatch="NEUTRAL"/>
</Filters>
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{5}[%file:%line] %msg%n"/>
<Policies>
<!--
interval: 多长时间生成一个新日志文件(Rolling的间隔),时间单位根据filePattern的时间精度来决定
modulate: 是否调整时间,以0为起始,interval作为偏移
-->
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<!--
size: 设置日志文件容量
-->
<SizeBasedTriggeringPolicy size="9MB"/>
</Policies>
<!-- 文件生成个数(默认7个) -->
<DefaultRolloverStrategy max="50"/>
</RollingFile>
</appenders>
<loggers>
<root level="debug">
<appender-ref ref="Console"/>
<appender-ref ref="File"/>
<appender-ref ref="RollingFile"/>
</root>
</loggers>
</configuration>