- 在開始之前請移步 快速構建一個springboot項目
1.application.properties新增配置
server.port=8080
2.新增AppConfig.java 文件
package com.lb.springboot.config;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
/**
* 應用自定義配置
* @author lb
*/
@Configuration
@ComponentScan(value = {"com.lb.springboot.**"})
@PropertySource("classpath:application-myconfig.properties")
public class AppConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(AppConfig.class);
// 加載服務端口配置
@Value("${server.port}")
private String serverPort;
public void outprint() {
LOGGER.info("logback - 加載配置 - serverPort: {}",serverPort);
}
}
3. 修改 Application.java
替換main
方法的內容爲:
ConfigurableApplicationContext ctx = SpringApplication.run(Application.class, args);
// 測試Logback打印配置
AppConfig appConfig = ctx.getBean(AppConfig.class);
appConfig.outprint();
4. 新增logback.xml文件
- 需要將logback.xml放入項目的
/src/main/resources/
目錄下
內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!--
scan: 當此屬性設置爲true時,配置文件如果發生改變,將會被重新加載,默認值爲true
scanPeriod: 設置監測配置文件是否有修改的時間間隔,如果沒有給出時間單位,默認單位是毫秒。當scan爲true時,此屬性生效。默認的時間間隔爲1分鐘。
debug: 當此屬性設置爲true時,將打印出logback內部日誌信息,實時查看logback運行狀態。默認值爲false。
-->
<configuration scan="true" scanPeriod="30 seconds" debug="false" >
<!-- 每個logger都關聯到logger上下文,默認上下文名稱爲default。但可以使用<contextName>設置成其他名字,用於區分不同應用程序的記錄。一旦設置,不能修改。 -->
<contextName>springboot-quickstart-002</contextName>
<!-- 通過<property>定義的值會被插入到logger上下文中。定義變量後,可以使"${}"來使用變量 -->
<property name="logback.path" value="/Users/yunnasheng/Desktop/logs" />
<property name="logback.level" value="INFO" />
<property name="logback.additivity" value="true" />
<!--格式化輸出:%d表示日期,%t表示線程名,%-5p:級別從左顯示5個字符寬度 %m:日誌消息,%n是換行符-->
<property name="logback.pattern" value="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p - %m%n" />
<!-- %d [%t] %-5p %c.%M[%L] - %m%n -->
<!-- %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{50} - %msg%n -->
<!--
<appender>是<configuration>的子節點,是負責寫日誌的組件
<appender>有兩個必要屬性name和class。name指定appender名稱,class指定appender的全限定名。
ConsoleAppender:把日誌添加到控制檯,有以下子節點:
<encoder>:對日誌進行格式化。
<target>:字符串 System.out 或者 System.err 默認 System.out
-->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<charset>UTF-8</charset>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${logback.pattern}</pattern>
</layout>
</encoder>
</appender>
<!--
FileAppender:把日誌添加到文件,有以下子節點
<file>:被寫入的文件名,可以是相對目錄,也可以是絕對目錄,如果上級目錄不存在會自動創建,沒有默認值。
<append>:如果是 true,日誌被追加到文件結尾,如果是 false,清空現存文件,默認是true。
<encoder>:對記錄事件進行格式化。
<prudent>:如果是 true,日誌會被安全的寫入文件,即使其他的FileAppender也在向此文件做寫入操作,效率低,默認是 false。
-->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日誌文件輸出的文件名-->
<FileNamePattern>${logback.path}/springboot-quickstart-002.%d{yyyy-MM-dd}.log</FileNamePattern>
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder">
<charset>UTF-8</charset>
<layout class="ch.qos.logback.classic.PatternLayout">
<pattern>${logback.pattern}</pattern>
</layout>
</encoder>
</appender>
<appender name ="ANSY_FILE" class= "ch.qos.logback.classic.AsyncAppender">
<!-- 不丟失日誌.默認的,如果隊列的80%已滿,則會丟棄TRACT、DEBUG、INFO級別的日誌 -->
<discardingThreshold >0</discardingThreshold>
<!-- 更改默認的隊列的深度,該值會影響性能.默認值爲256 -->
<queueSize>256</queueSize>
<appender-ref ref ="FILE"/>
</appender>
<logger name="org.springframework" level="INFO"/>
<logger name="org.apache" level="ERROR"/>
<logger name="java.sql" level="ERROR"/>
<!--
<root> 也是<loger>元素,但是它是根loger。只有一個level屬性,應爲已經被命名爲"root"
level: 用來設置打印級別,大小寫無關:TRACE < DEBUG < INFO < WARN < ERROR, ALL 和 OFF,不能設置爲INHERITED或者同義詞NULL。 默認是DEBUG
<loger>和<root>可以包含零個或多個<appender-ref>元素,標識這個引用的appender將會被添加到這個loger中。
-->
<root level="${logback.level}">
<appender-ref ref="STDOUT" />
<appender-ref ref="ANSY_FILE" />
</root>
</configuration>
5. 啓動測試
控制檯打印如下,關鍵日誌 logback - 加載配置 - serverPort: 8080
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.3.7.RELEASE)
2020-12-14 18:43:23 [main] INFO - Starting Application on yunnashengdeMacBook-Pro.local with PID 26117 (/Users/yunnasheng/work/github-workspace/springboot-quickstart-002/target/classes started by yunnasheng in /Users/yunnasheng/work/github-workspace/springboot-quickstart-002)
2020-12-14 18:43:23 [main] INFO - No active profile set, falling back to default profiles: default
2020-12-14 18:43:24 [main] INFO - Tomcat initialized with port(s): 8080 (http)
2020-12-14 18:43:24 [main] INFO - Root WebApplicationContext: initialization completed in 557 ms
2020-12-14 18:43:24 [main] INFO - Initializing ExecutorService 'applicationTaskExecutor'
2020-12-14 18:43:24 [main] INFO - Tomcat started on port(s): 8080 (http) with context path ''
2020-12-14 18:43:24 [main] INFO - Started Application in 1.027 seconds (JVM running for 1.555)
2020-12-14 18:43:24 [main] INFO - logback - 加載配置 - serverPort: 8080