---
title: 'Spring Boot Logger '
disqus: hackmd
---
###### tags: `SpringBoot`
Spring Boot Logger
===
[TOC]
## 筆記目的
了解如何使用Spring Boot Logger
## 先備條件
需要配置兩個文件
1. applications
2. logback-spring.xml
第一個文件只有一行,第二個文件很複雜,但是複製就好,基本上已經把配置寫好
## 程式碼部分
### 檔案結構架構

### applications
```
# To decide which environment to use
# prod or dev
spring.profiles.active=dev
# let the spring boot will shut down when finish
spring.main.web-application-type=none
#log
logging.config=classpath:logback-spring.xml
```
### logback-spring.xml
```
<?xml version="1.0" encoding="UTF-8"?>
<!-- 参考 https://www.mdeditor.tw/pl/pry6/zh-tw -->
<!-- https://codertw.com/%E7%A8%8B%E5%BC%8F%E8%AA%9E%E8%A8%80/30975/ -->
<configuration>
<contextName>logback-spring</contextName>
<property name="pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n"/>
<property name="LOG_HOME" value="./logs"/>
<property name="FILE_NAME" value="AllieGoogleOptimizePerformanceObserveApplication"/>
<property name="MAX_FILE_SIZE" value="30MB"/>
<property name="MAX_HISTORY" value="30"/><!-- 單位:天 -->
<!-- 控制檯輸出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 檔案輸出 -->
<appender name="Main" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${LOG_HOME}/${FILE_NAME}.%d.%i.log</fileNamePattern>
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>${MAX_FILE_SIZE}</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
<maxHistory>${MAX_HISTORY}</maxHistory>
</rollingPolicy>
<encoder>
<pattern>${pattern}</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- ALL/TRACE/DEBUG/INFO/WARN/ERROR/FATAL -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="Main"/>
</root>
</configuration>
```
## 效果
1. 會自動產生一個資料夾名字為log,並且位於

2. 其內容為
```java=
2021-10-04 09:26:08.541 [main] INFO c.e.v.GoogleAccountBudgetContractAnnualConsumptionStatisticsApplication - Starting GoogleAccountBudgetContractAnnualConsumptionStatisticsApplication using Java 1.8.0_301 on DESKTOP-SC0VR8S with PID 2080 (C:\Users\TDG_USER\workspaceforv8\google-account-budget-contract-annual-consumption-statistics\target\classes started by TDG_USER in C:\Users\TDG_USER\workspaceforv8\google-account-budget-contract-annual-consumption-statistics)
2021-10-04 09:26:08.544 [main] INFO c.e.v.GoogleAccountBudgetContractAnnualConsumptionStatisticsApplication - The following profiles are active: dev
2021-10-04 09:26:09.280 [main] INFO c.e.v.GoogleAccountBudgetContractAnnualConsumptionStatisticsApplication - Started GoogleAccountBudgetContractAnnualConsumptionStatisticsApplication in 1.187 seconds (JVM running for 2.03)
2021-10-04 09:26:09.282 [main] INFO c.e.v.GoogleAccountBudgetContractAnnualConsumptionStatisticsApplication - 開始Google FB 年度帳號運算消耗
2021-10-04 09:26:09.283 [main] INFO c.e.v.b.service.UpdateSpreadsheetFigureService - step 1 把CID 還有 startdate , enddate 接回來
2021-10-04 09:26:09.519 [main] WARN c.g.api.client.util.store.FileDataStoreFactory - unable to change permissions for everybody: C:\Users\TDG_USER\workspaceforv8\google-account-budget-contract-annual-consumption-statistics\tokens
2021-10-04 09:26:09.520 [main] WARN c.g.api.client.util.store.FileDataStoreFactory - unable to change permissions for owner: C:\Users\TDG_USER\workspaceforv8\google-account-budget-contract-annual-consumption-statistics\tokens
2021-10-04 09:26:12.586 [main] INFO c.e.v.b.service.UpdateSpreadsheetFigureService - step 2 parse Google CID to Long array
2021-10-04 09:26:14.380 [Gax-1] INFO com.google.ads.googleads.lib.request.summary - SUCCESS REQUEST SUMMARY. Method: google.ads.googleads.v8.services.GoogleAdsService/Search, Endpoint: googleads.googleapis.com:443, CustomerID: 3704605386, RequestID: jW85RclSEjrmAgw9WG9dGQ, ResponseCode: OK, Fault: null.
2021-10-04 09:26:14.800 [Gax-8] INFO com.google.ads.googleads.lib.request.summary - SUCCESS REQUEST SUMMARY. Method: google.ads.googleads.v8.services.GoogleAdsService/Search, Endpoint: googleads.googleapis.com:443, CustomerID: 6731208557, RequestID: WOvLhsfBPT4MSF2LfmcnXA, ResponseCode: OK, Fault: null.
2021-10-04 09:26:15.542 [Gax-12] INFO com.google.ads.googleads.lib.request.summary - SUCCESS REQUEST SUMMARY. Method: google.ads.googleads.v8.services.GoogleAdsService/Search, Endpoint: googleads.googleapis.com:443, CustomerID: 6760335214, RequestID: 87qelPSghOujaF-WloIdfw, ResponseCode: OK, Fault: null.
2021-10-04 09:26:16.066 [Gax-13] INFO com.google.ads.googleads.lib.request.summary - SUCCESS REQUEST SUMMARY. Method: google.ads.googleads.v8.services.GoogleAdsService/Search, Endpoint: googleads.googleapis.com:443, CustomerID: 8092359339, RequestID: 0yr2fG83_eWp9oK1RrmsDQ, ResponseCode: OK, Fault: null.
2021-10-04 09:26:17.677 [Gax-20] INFO com.google.ads.googleads.lib.request.summary - SUCCESS REQUEST SUMMARY. Method: google.ads.googleads.v8.services.GoogleAdsService/Search, Endpoint: googleads.googleapis.com:443, CustomerID: 8258490584, RequestID: 2dpaA-0-lJuiYYAk7v-kNw, ResponseCode: OK, Fault: null.
2021-10-04 09:26:17.681 [main] INFO c.e.v.b.service.UpdateSpreadsheetFigureService - step 3 把 目標 Google CID 還有對應的MCC 存成hashmap
2021-10-04 09:26:17.681 [main] INFO c.e.v.b.service.UpdateSpreadsheetFigureService - step 4 開始計算 Google Annaul Report Bean
2021-10-04 09:26:18.317 [Gax-24] INFO com.google.ads.googleads.lib.request.summary - SUCCESS REQUEST SUMMARY. Method: google.ads.googleads.v8.services.GoogleAdsService/Search, Endpoint: googleads.googleapis.com:443, CustomerID: 3651231947, RequestID: CI6UmklLxu3s4E7sEtw65g, ResponseCode: OK, Fault: null.
2021-10-04 09:26:18.951 [Gax-28] INFO com.google.ads.googleads.lib.request.summary - SUCCESS REQUEST SUMMARY. Method: google.ads.googleads.v8.services.GoogleAdsService/Search, Endpoint: googleads.googleapis.com:443, CustomerID: 5435483526, RequestID: kDH9L7hyz3B3kdQriVOUHw, ResponseCode: OK, Fault: null.
2021-10-04 09:26:19.592 [Gax-31] INFO com.google.ads.googleads.lib.request.summary - SUCCESS REQUEST SUMMARY. Method: google.ads.googleads.v8.services.GoogleAdsService/Search, Endpoint: googleads.googleapis.com:443, CustomerID: 6033705899, RequestID: _fTuhonxtPZgqa4-LNom6g, ResponseCode: OK, Fault: null.
2021-10-04 09:26:20.310 [Gax-34] INFO com.google.ads.googleads.lib.request.summary - SUCCESS REQUEST SUMMARY. Method: google.ads.googleads.v8.services.GoogleAdsService/Search, Endpoint: googleads.googleapis.com:443, CustomerID: 6240126898, RequestID: bbz6Cytz-93QutmYExhXPw, ResponseCode: OK, Fault: null.
2021-10-04 09:26:21.105 [Gax-40] INFO com.google.ads.googleads.lib.request.summary - SUCCESS REQUEST SUMMARY. Method: google.ads.googleads.v8.services.GoogleAdsService/Search, Endpoint: googleads.googleapis.com:443, CustomerID: 9646799205, RequestID: IV2VUUbneX6gFkHrnRJ5hw, ResponseCode: OK, Fault: null.
2021-10-04 09:26:21.751 [Gax-44] INFO com.google.ads.googleads.lib.request.summary - SUCCESS REQUEST SUMMARY. Method: google.ads.googleads.v8.services.GoogleAdsService/Search, Endpoint: googleads.googleapis.com:443, CustomerID: 9772017439, RequestID: YpVjr9He0lI3_cHLdDlMTg, ResponseCode: OK, Fault: null.
2021-10-04 09:26:21.757 [main] INFO c.e.v.b.service.UpdateSpreadsheetFigureService - step 5 開始計算 FB Annaul Report Bean
2021-10-04 09:26:37.567 [main] INFO c.e.v.b.service.UpdateSpreadsheetFigureService - step 6 開始填寫 將資料填寫到 spreadsheet上
2021-10-04 09:26:38.717 [main] INFO c.e.v.b.service.UpdateSpreadsheetFigureService - 計算完畢 程式自動關閉
```
## 基本於 java class 內的用法,超基本那種
```java=
package com.example.value;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import com.example.value.business.service.UpdateSpreadsheetFigureService;
import com.example.value.properties.ServiceProperties;
@SpringBootApplication
public class GoogleAccountBudgetContractAnnualConsumptionStatisticsApplication implements ApplicationRunner{
private static Logger logger = LoggerFactory.getLogger(GoogleAccountBudgetContractAnnualConsumptionStatisticsApplication.class);
@Autowired
ServiceProperties servicePreperties;
@Autowired
UpdateSpreadsheetFigureService updateSpreadsheetFigureService;
public static void main(String[] args) {
SpringApplication.run(GoogleAccountBudgetContractAnnualConsumptionStatisticsApplication.class, args);
}
@Override
public void run(ApplicationArguments args) throws Exception {
// TODO Auto-generated method stub
logger.info("開始Google FB 年度帳號運算消耗");
updateSpreadsheetFigureService.activateDetectProcess();
}
}
```
## 變數用法
```
logger.info("Total get " + aiCampaignList.size() + " 筆 AI Campaign by aIOptimizationService...");
```