如何通過做威客賺錢長春網(wǎng)站優(yōu)化方案
日志文件
- 一. 日志文件有什么用
- 二. 日志怎么用
- 三. ?定義?志打印
- 1. 在程序中得到?志對象
- 2. 使??志對象打印?志
- 3. ?志格式說明
- 四. 日志級別
- 1. ?志級別有什么?
- 2. ?志級別的分類與使?
- 五. 日志持久化
- 六. 更簡單的?志輸出—lombok
- 1. 添加 lombok 依賴
- 2. 輸出?志
- 3. lombok 原理
- 2. lombok 更多注解說明
一. 日志文件有什么用
- 最主要的?途就是排除和定位問題。除了發(fā)現(xiàn)和定位問題之外,我們還可以通過?志實現(xiàn)以下功能:
- 記錄?戶登錄?志,?便分析?戶是正常登錄還是惡意破解?戶。
- 記錄系統(tǒng)的操作?志,?便數(shù)據(jù)恢復(fù)和定位操作?。
- 記錄程序的執(zhí)?時間,?便為以后優(yōu)化程序提供數(shù)據(jù)?持。
二. 日志怎么用
Spring Boot 項?在啟動的時候默認(rèn)就有?志輸出,如下圖所示:
通過上述?志信息我們能發(fā)現(xiàn)以下 3 個問題:
- Spring Boot 內(nèi)置了?志框架(不然也輸出不了?志)。
- 默認(rèn)情況下,輸出的?志并?是開發(fā)者定義和打印的,那開發(fā)者怎么在程序中?定義打印?志呢?
- ?志默認(rèn)是打印在控制臺上的,?控制臺的?志是不能被保存的,那么怎么把?志永久的保存下來呢?
三. ?定義?志打印
開發(fā)者?定義打印?志的實現(xiàn)步驟:
- 在程序中得到?志對象。
- 使??志對象的相關(guān)語法輸出要打印的內(nèi)容。
1. 在程序中得到?志對象
在程序中獲取?志對象需要使??志?? LoggerFactory
// 1.得到?志對象private static Logger logger = LoggerFactory.getLogger(UserController.class);
注意:
- ?志??需要將每個類的類型傳遞進去,這樣我們才知道?志的歸屬類,才能更?便、更直觀的定位到問題類。
- Logger 對象是屬于 org.slf4j 包下的,不要導(dǎo)?錯包。
因為 Spring Boot 中內(nèi)置了?志框架 Slf4j,所以咱們可以直接在程序中調(diào)? slf4j 來輸出?志。
常?的?志框架:
2. 使??志對象打印?志
?志對象的打印?法有很多種,我們可以先使? info() ?法來輸出?志,如下代碼所示:
// 2.使??志打印?志logger.info("--------------要輸出?志的內(nèi)容----------------");
3. ?志格式說明
四. 日志級別
1. ?志級別有什么?
- ?志級別可以幫你篩選出重要的信息,?如設(shè)置?志級別為 error,那么就可以只看程序的報錯?志了,對于普通的調(diào)試?志和業(yè)務(wù)?志就可以忽略了,從?節(jié)省開發(fā)者信息篩選的時間。
- ?志級別可以控制不同環(huán)境下,?個程序是否需要打印?志,如開發(fā)環(huán)境我們需要很詳細(xì)的信息,??產(chǎn)環(huán)境為了保證性能和安全性就會輸?盡量少的?志,?通過?志的級別就可以實現(xiàn)此需求。
2. ?志級別的分類與使?
- trace:微量,少許的意思,級別最低;
- debug:需要調(diào)試時候的關(guān)鍵信息打印;
- info:普通的打印信息(默認(rèn)?志級別);
- warn:警告,不影響使?,但需要注意的問題;
- error:錯誤信息,級別較?的錯誤?志信息;
- fatal:致命的,因為代碼異常導(dǎo)致程序退出執(zhí)?的事件。
級別越高接收到的消息就越少,只能收到高于或者等于該級別的日志。如設(shè)置了 warn 就只能收到 warn、error、fatal 級別的?志了。
?志級別設(shè)置:
?志級別配置只需要在配置?件中設(shè)置“l(fā)ogging.level”配置項即可,如下所示:
logging:level:root: error # 配置根路徑的(全局)?志級別
logging:level:com:example:controller: trace # 局部日志設(shè)置,位置從 java 包開始,且一般精準(zhǔn)到包,不會精準(zhǔn)到類,若同時出現(xiàn)全局和局部,則以局部為準(zhǔn)
進行日志輸出:
@RestController
@RequestMapping("/user")
public class UserController {// 1.得到?志對象private static Logger logger =LoggerFactory.getLogger(UserController.class);@Value("${server.port}")private String port;@Value("${spring.datasource.url}")private String url;@RequestMapping("/sayhi")public String sayHi() {// 2.使??志打印?志logger.trace("================= trace ===============");logger.debug("================= debug ===============");logger.info("================= info ===============");logger.warn("================= warn ===============");logger.error("================= error ===============");return "Hi," + url;}
}
?志的輸出級別,默認(rèn)是 info.
五. 日志持久化
以上的?志都是輸出在控制臺上的,然?在?產(chǎn)環(huán)境上咱們需要將?志保存下來,以便出現(xiàn)問題之后追溯問題,把?志保存下來的過程就叫做持久化。
想要將?志進?持久化,只需要在配置?件中指定?志的存儲?錄或者是指定?志保存?件名之后,Spring Boot 就會將控制臺的?志寫到相應(yīng)的?錄或?件下了。
配置?志?件的保存路徑:
logging:file:path: D:\\DevelopTool\\JAVA #自動創(chuàng)建目錄
配置?志?件的?件名:
logging:file:name: D:\\DevelopTool\\JAVA\\spring-1004.log # 文件存在則會續(xù)寫,不會覆蓋 默認(rèn)每個文件大小為 10MB, 大于 10MB 則分為多個文件,可以自己設(shè)置
存儲結(jié)果:
六. 更簡單的?志輸出—lombok
每次都使? LoggerFactory.getLogger(xxx.class) 很繁瑣,使? lombok 來更簡單的輸出。
- 添加 lombok 框架?持。
- 使? @slf4j 注解輸出?志。
1. 添加 lombok 依賴
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version><optional>true</optional></dependency>
2. 輸出?志
@RestController
@RequestMapping("/p")
@Slf4j
public class PersonController {@RequestMapping("/log")public void loggerTest() {log.error("------------------- error -----------------");}
}
注意:使? @Slf4j 注解,在程序中使? log 對象即可輸??志,并且只能使? log 對象才能輸出,這是 lombok 提供的對象名。
3. lombok 原理
lombok 能夠打印?志的原理就在 target ?錄??,target 為項?最終執(zhí)?的代碼,查看 target ?錄如下:
可以發(fā)現(xiàn) lombok 其實只是方便了我們編寫,并不會有什么性能的提升,它的原理就是在編譯前將注解替換為對應(yīng)的代碼。
Java 程序的運?原理:
Lombok 的作?如下圖所示:
2. lombok 更多注解說明
基本注解
注解 | 作? |
---|---|
@Getter | ?動添加 getter ?法 |
@Setter | ?動添加 setter ?法 |
@ToString | ?動添加 toString ?法 |
@EqualsAndHashCode | ?動添加 equals 和 hashCode ?法 |
@NoArgsConstructor | ?動添加?參構(gòu)造?法 |
@AllArgsConstructor | ?動添加全屬性構(gòu)造?法,順序按照屬性的定義順序 |
@NonNull | 屬性不能為 null |
@RequiredArgsConstructor | ?動添加必需屬性的構(gòu)造?法,final + @NonNull 的屬性為必需 |
組合注解
注解 | 作? |
---|---|
@Data | @Getter + @Setter + @ToString +@EqualsAndHashCode +@RequiredArgsConstructor +@NoArgsConstructor |
?志注解
注解 | 作? |
---|---|
@Slf4j | 添加?個名為 log 的?志,使? slf4j |
好啦! 以上就是 SpringBoot ?志?件 的講解,希望能幫到你 !
評論區(qū)歡迎指正 !