SpringBoot2 - 日志输出

日志概要

日志的框架基本分为 日志的抽象层 和 日志的实现层。
主要的日志抽象层

  • JCL(Jakarta Commons Logging)
  • jboss-logging
  • SLF4j(Simple Logging Facade for Java)

主要的日志实现层-----配置文件

  • Log4j--------------------------------Log4j.properties
  • JUL(java.util.logging)-----------logging.properties
  • Log4j2------------------------------log4j2-spring.xml or log4j2.xml
  • Logback----------------------------logback-spring.xml ,logback-spring.groovy,logback.xml or logback.groovy
    →logback.xml直接被日志框架识别 ,logback-spring.xml日志框架就不直接加载日志配置项,由SpringBoot加载,我们可以在里面写自己的配置
    例如
<springProfile name="dev">
	<!-- 可以指定某段配置只在某个环境下生效 -->
</springProfile>
<springProfile name!="dev">
	<!-- 可以指定某段配置只在某个环境下生效 -->
</springProfile>

Hibernate选用的 jboss-logging
Spring Boot:底层是Spring框架,Spring默认框架是JCL;
​SpringBoot选用 SLF4J 和 logback
每个日志框架的实现框架都有自己的配置文件。使用slf4j以后,配置文件还是做成日志实现框架本身的配置文件

SLF4J使用

配置设定

由于SpringBoot2 默认支持SLF4J,因此,我们不用添加任何依赖
可以直接通过配置 application.yml / application.properties 指定出力level

#Log level
logging.level.root=INFO
logging.level.org.springframework.web=INFO

也可以自己生成配置文件·,更加灵活控制输入。

<?xml version="1.0"?>
<configuration>
    <!-- #Formate
                #%d:Date  #%thread:Thread No  #%-5level:Left number level 
                #%logger{50}:char number  #%msg:message  #%n: -->
    <property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
    <!-- Define path. Use absolutly path. -->
    <property name="LOG_FILE" value="C:/Desktop/log/spring-log.%d{yyyy-MM-dd}.%i.log" />
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder 
			by default -->
        <encoder>  
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE}</fileNamePattern>
            <!-- keep 30 days' worth of history -->
            <maxHistory>30</maxHistory>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <!-- Max file size. -->
                <maxFileSize>2MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <!-- if Over delete old file. -->
            <totalSizeCap>1GB</totalSizeCap>
        </rollingPolicy>
    </appender>
    <!-- project default level -->
    <logger name="com.awscloud" level="DEBUG" additivity="false">
        <appender-ref ref="STDOUT" />
    </logger>
    <!-- system default level -->
    <root level="info">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

使用

因为已经添加过了 lombok 的插件,所以可以直接使用注释 @Slf4j

@Slf4j
@ApiModel(description = "テストコントローラ") 
@RestController
public class SampleController {
    @RequestMapping(value="/sendmessage", method = RequestMethod.GET)
    @ApiOperation("Test")
    public String sendmessage() {
        log.info("This is sendmessage log.");
        return "Hello!, This is a sample for SpringBoot API. ";
    }
}

直接就可以在控制端输入了log,
如果想输入彩色信息,需要在 logback-spring.xml 文件内添加

<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
    <conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
    <conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
    <!-- pattern -->
    <property name="CONSOLE_LOG_PATTERN" 
        value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>

使用时pattern 替换为 CONSOLE_LOG_PATTERN 。

另外默认的彩色输出设定是 false,需要在
application.yml / application.properties 指定

spring:
	output:
    	ansi:
      		enabled: always

猜你喜欢

转载自blog.csdn.net/oblily/article/details/87866019