在开发和运维中日志的处理可是少不了的,这里我们就来说明一下SpringBoot中的日志配置
首先说明下SpringBoot支持的日志框架
Java Util Logging、Log4J2、logback
其中呢SpringBoot默认使用的是logback,配置方式有默认配置和引用外部文件配置两种。
配置方式
一、默认配置方式
SpringBoot默认使用的是logback。
如果你在Maven中添加的以下依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
其实这个是不需要的,因为SpringBoot的spring-boot-starter中包含了spring-boot-starter-logging。
日志级别从高到低分为
TRACE < DEBUG < INFO < WARN < ERROR < FATAL
yml中加入
logging:
level:
root: debug
新建一个测试类,发现日志就已经输出了
如果想自定义包的日志级别 可以在l添加如下配置
logging:
level:
root: debug
com.maoxs: info #自定义包的日志输出级别
如果想改变日志的输出格式则添加如下配置
logging:
pattern:
console: "%d -%msg%n"
如果想输出为文件形式则可以添加如下配置
logging:
pattern:
console: "%d -%msg%n"
# path: E:\springBootSomeProject\
# file: E:\springBootSomeProject\log
level:
root: debug
logging.file
设置文件,可以是绝对路径,也可以是相对路径。如:logging.file=my.log
logging.path
设置目录,会在该目录下创建spring.log
文件,并写入日志内容,如:logging.path=E:\somePaoject
但是二者不能同时使用,如若同时使用,则只有logging.file
生效
默认情况下,日志文件的大小达到10MB
时会切分一次,产生新的日志文件,默认级别为:ERROR、WARN、INFO
插件使用 由于日志每次都要写这么一行玩意
private final static Logger logger=LoggerFactory.getLogger(******.class);
可以使用lombok插件 具体安装可以去百度 (未来我会放上使用贴)
也可以实现日志的效果,很方便。
二、自定义日志配置
根据不同的日志系统,你可以按如下规则组织配置文件名,就能被正确加载:
- Logback:
logback-spring.xml, logback-spring.groovy, logback.xml, logback.groovy
- Log4j:
log4j-spring.properties, log4j-spring.xml, log4j.properties, log4j.xml
- Log4j2:
log4j2-spring.xml, log4j2.xml
- JDK (Java Util Logging):
logging.properties
spring官方提示建议您使用-spring
变量进行日志记录配置 例如,logback-spring.xml
而不是logback.xml
也就是说如果命名为logback.xml将无法初始化日志配置
如果是spring指认的默认配置文件则yml不需要配置任何东西就可以生效,如果不是的话则需要指认下添加如下配置即可
logging:
path: classpath:logback-xxxx.xml
这里贴出一份基础的 logback-spring.xml,供大家测试 想学习更深的话 点击logback学习网站
比较方便的是 不同环境中间的配置 可以用<springProfile name="profile"> 标签来包括
<?xml version="1.0" encoding="UTF-8" ?>
<configuration>
<substitutionProperty name="log.proj" value="${project.artifactId}" />
<substitutionProperty name="log.base" value="logs/${log.proj}" />
<substitutionProperty name="max.size" value="100MB" />
<jmxConfigurator />
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>%date [%thread] %-5level %logger{80} - %msg%n</pattern>
</layout>
</appender>
<appender name="file.info" class="ch.qos.logback.core.rolling.RollingFileAppender">
<File>${log.base}/${log.proj}_info.log</File>
<rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
<fileNamePattern>${log.base}/${log.proj}_info.%i.gz</fileNamePattern>
<minIndex>1</minIndex>
<maxIndex>20</maxIndex>
</rollingPolicy>
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<maxFileSize>${max.size}</maxFileSize>
</triggeringPolicy>
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>INFO</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
</appender>
<root level="DEBUG">
<appender-ref ref="stdout" />
<appender-ref ref="file.info" />
</root>
<logger name="com.maoxs" additivity="false">
<appender-ref ref="file.info" />
<level value="INFO" />
</logger>
</configuration>
这里在说下log4j2的配置把 可能有些小伙伴还是喜欢log4j2的配置规则
如果想使用log4j2则需要去除spring-boot-starter-logging 因为会冲突
<!--去除 spring-boot-starter-logging -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 添加log4j2 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
这里也贴出一个log4j2的基础配置,供大家测试 想学习更多配置 点击 log4j2学习网站
<?xml version="1.0" encoding="UTF-8"?>
<!-- Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,
你会看到log4j2内部各种详细输出。可以设置成OFF(关闭) 或 Error(只输出错误信息)。
30s 刷新此配置
-->
<configuration status="WARN" monitorInterval="30">
<!-- 日志文件目录、压缩文件目录、日志格式配置 /Users/admin/Code 根据自己的需求改变-->
<properties>
<Property name="fileName">/Users/admin/Code/log</Property>
<Property name="fileGz">/Users/admin/Code/log/7z</Property>
<Property name="PID">????</Property>
<Property name="LOG_PATTERN">%clr{%d{yyyy-MM-dd HH:mm:ss.SSS}}{faint} %clr{%5p} %clr{${sys:PID}}{magenta} %clr{---}{faint} %clr{[%15.15t]}{faint} %clr{%-40.40c{1.}}{cyan} %clr{:}{faint} %m%n%xwEx</Property>
</properties>
<Appenders>
<!-- 输出控制台日志的配置 -->
<Console name="console" target="SYSTEM_OUT">
<!--控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch)-->
<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
<!-- 输出日志的格式 -->
<PatternLayout pattern="${LOG_PATTERN}"/>
</Console>
<!-- 打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
<RollingRandomAccessFile name="infoFile" fileName="${fileName}/web-info.log" immediateFlush="false"
filePattern="${fileGz}/$${date:yyyy-MM}/%d{yyyy-MM-dd}-%i.web-info.gz">
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<SizeBasedTriggeringPolicy size="20 MB"/>
</Policies>
<Filters>
<!-- 只记录info和warn级别信息 -->
<ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
<ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<!-- 指定每天的最大压缩包个数,默认7个,超过了会覆盖之前的 -->
<DefaultRolloverStrategy max="50"/>
</RollingRandomAccessFile>
<!-- 存储所有error信息 -->
<RollingRandomAccessFile name="errorFile" fileName="${fileName}/web-error.log" immediateFlush="false"
filePattern="${fileGz}/$${date:yyyy-MM}/%d{yyyy-MM-dd}-%i.web-error.gz">
<PatternLayout pattern="${LOG_PATTERN}"/>
<Policies>
<SizeBasedTriggeringPolicy size="50 MB"/>
</Policies>
<Filters>
<!-- 只记录error级别信息 -->
<ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/>
</Filters>
<!-- 指定每天的最大压缩包个数,默认7个,超过了会覆盖之前的 -->
<DefaultRolloverStrategy max="50"/>
</RollingRandomAccessFile>
</Appenders>
<!-- Mixed sync/async -->
<Loggers>
<Root level="debug" includeLocation="true">
<AppenderRef ref="console"/>
<AppenderRef ref="infoFile"/>
<AppenderRef ref="errorFile"/>
</Root>
<AsyncRoot level="debug" includeLocation="true">
<AppenderRef ref="console"/>
<AppenderRef ref="infoFile"/>
<AppenderRef ref="errorFile"/>
</AsyncRoot>
</Loggers>
</configuration>
配置方法和logback 自动以配置一样
值得一提的是lombok 也提供了log4j2的简便用法 在类上加入@Log4j2 注解即可
注:如果不对联系本宝宝及时改正~