Springboot 整合 logback
674人浏览 / 0人评论
依赖
<!-- 如果已经添加了 spring-boot-starter 就不用再添加 spring-boot-starter-logging -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
logback-spring.xml
<?xml version="1.0" encoding="utf-8"?>
<!--配置文件说明:
共有一个父标签、两种属性、三个节点:
1.一个父标签:configuration
2. 两种属性:contextName和property
3. 三个节点:appender、root、logger
主要就是appender追加到哪里:控制台/文件,然后采用哪种pattern(在property定义了pattern格式)
然后就是logger和root配置,指定日志输出级别,以及引用哪种appender
-->
<configuration>
<!--根节点<configuration>包含的属性:
scan:当此属性设置为true时,配置文件如果发生改变,将会被重新加载,默认值为true。
scanPeriod:设置监测配置文件是否有修改的时间间隔,如果没有给出时间单位,默认单位是毫秒。当scan为true时,此属性生效。默认的时间间隔为1分钟。
debug:当此属性设置为true时,将打印出logback内部日志信息,实时查看logback运行状态。默认值为false。
-->
<contextName>spring-data-jpa-dev</contextName>
<property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n"/>
<property name="pattern-color"
value="%yellow(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %green(%logger{50}) - %highlight(%msg) %n"/>
<!--文件路径输出说明,会在项目根目录下自动生成文件夹及log文件,也可以指定其他磁盘:D://-->
<property name="LOG_HOME" value="./logs/info"/>
<property name="LOG_HOME_ERR" value="./logs/err"/>
<!-- 控制台输出-无颜色、只输出error级别 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<!--ThresholdFilter为系统定义的拦截器,例如我们用ThresholdFilter来过滤掉ERROR级别以下的日志不输出到文件中。
如果不用记得注释掉,不然你控制台会发现没日志~-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!-- 控制台输出-带颜色 -->
<appender name="CONSOLE-WITH-COLOR" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern-color}</pattern>
</encoder>
</appender>
<!-- 文件输出 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/%d.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志保留天数-->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!-- 文件输出 ERR-->
<appender name="FILE_ERR" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME_ERR}/%d.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>10MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<!--日志保留天数-->
<maxHistory>30</maxHistory>
</rollingPolicy>
<!--只输出error级别-->
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<encoder>
<pattern>${pattern}</pattern>
</encoder>
</appender>
<!-- 单配置文件 — 全局配置 — 只有一个application.yml文件时使用 -->
<root level="info">
<appender-ref ref="CONSOLE-WITH-COLOR"/>
</root>
<!--单配置文件 - 局部配置 - 只有一个application.yml文件时使用-->
<!--additivity="true" LogTest类下的日志会输出两遍-->
<!--additivity="false" 会覆盖root的配置,只输出一遍-->
<!--<logger name="com.jbritian.springdatajpa.schedule.LogTest" level="INFO" additivity="true">-->
<!-- <appender-ref ref="CONSOLE"/>-->
<!--</logger>-->
<!-- 多配置文件 — 开发 — application-local.yml、application-dev.yml -->
<springProfile name="local,dev">
<root level="INFO">
<appender-ref ref="CONSOLE-WITH-COLOR"/>
<appender-ref ref="FILE_ERR"/>
</root>
<!--<logger level="WARN" name="org.springframework"/>-->
<!--<logger level="WARN" name="com.netflix"/>-->
<!--<logger level="DEBUG" name="org.hibernate.SQL"/>-->
</springProfile>
<!-- 多配置文件 — 部署 — application-prod.yml -->
<springProfile name="prod">
<root level="INFO">
<appender-ref ref="CONSOLE-WITH-COLOR"/>
<appender-ref ref="FILE"/>
<appender-ref ref="FILE_ERR"/>
</root>
<!--<logger level="WARN" name="org.springframework"/>-->
<!--<logger level="WARN" name="com.netflix"/>-->
<!--<logger level="DEBUG" name="org.hibernate.SQL"/>-->
</springProfile>
<!--1. root和logger是父子的关系。
Logger的appender根据参数additivity决定是否要叠加root的appender,logger的级别是其自身定义的级别,和root的级别没什么关系。
2. logger对单个包或类添加配置,相当于局部配置,root相当于全局配置
如果logger里面配置了additivity="false",就会覆盖root的,只打印一遍;
但是additivity="true",就会向上层再次传递,不会覆盖,而是打印两遍!
-->
</configuration>
测试
@Component
@Configuration
@EnableScheduling
public class LogTest {
private static final Logger logger = LoggerFactory.getLogger(LogTest.class);
@Scheduled(fixedRate = 5000)
public void log(){
logger.info("info");
logger.warn("warn");
logger.error("error");
}
}
全部评论