文章目錄
- 一. 日志有什么用?
- 二. 自定義日志打印
- 1. 日志的使用與打印
- 三. 日志級別
- 1. 日志級別有什么用?
- 2. 日志級別的分類及使用
- 四. 日志持久化
- 五. 更簡單的日志輸出---Lombok
- 1. Lombok的使用
- 2. lombok原理解釋
- 2.1 Lombok更多注解說明
一. 日志有什么用?
在Java中,日志是一種記錄和追蹤應用程序運行時信息的重要工具.以下是日志在Java中的幾個主要用途:
- 調試和故障排查:通過輸出詳細的日志消息,可以幫助開發人員調試代碼并解決問題。日志可以記錄關鍵的變量值、函數調用堆棧等信息,從而更好地定位和修復 bug。
- 運行時監控:日志可以用于監控應用程序的運行情況,例如記錄關鍵指標(如請求處理時間、數據庫查詢次數)以及異常情況。這些信息可以用來分析應用程序性能、發現潛在的瓶頸或異常行為,并進行相應的優化和調整。
- 安全審計和合規性:日志記錄可以用于安全審計和合規性檢查。通過記錄關鍵事件和操作,可以提供追蹤和審計的能力,了解系統的用戶行為、權限變更等情況,以便跟蹤不當行為或滿足法規要求。
- 性能分析:通過分析應用程序的日志,可以評估其性能,并找出潛在的性能問題和瓶頸。通過記錄請求響應時間、資源使用情況等數據,可以對應用程序的性能進行實時監測和優化。
- 記錄用戶登錄日志,方便分析用戶是正常登錄還是惡意破解?戶。記錄系統的操作日志,方便數據恢復和定位操作?。記錄程序的執行時間,方便為以后優化程序提供數據支持.
Java中有多種日志框架可供選擇,如Log4j
、Logback
和java.util.logging
等。這些日志框架提供了豐富的功能和配置選項,可以根據需求靈活地記錄日志,并支持將日志輸出到不同的目標(如控制臺、文件、數據庫等)。
在Spring Boot
中,可以通過使用日志框架來記錄應用程序的日志。Spring Boot默認使用的是SLF4J
(Simple Logging Facade for Java),并且集成了常用的日志實現框架,如Logback
和Log4j2
。
二. 自定義日志打印
程序員自定義打印日志的實現步驟:
- 在程序中得到日志對象.
- 使用日志對象的相關語法輸出要打印的內容
1. 日志的使用與打印
- 在
pom.xml
中添加以下依賴:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></dependency>
- 配置日志級別:在
application.properties
或application.yml
中配置日志級別。可以設置根級別日志以及特定類或包的日志級別。例如,要將根級別日志設置為info級別,可以在配置文件中添加以下配置: - 記錄日志:在代碼中使用日志打印語句記錄日志。Spring Boot通過@Autowired注解將日志對象注入到代碼中,可以直接使用。例如,在一個Controller類中,可以這樣使用日志:
package com.example.demo;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class MyController {private static final Logger logger = LoggerFactory.getLogger(MyController.class);//步驟一@RequestMapping("/hello")public String home() {logger.info("Hello, info!");//步驟二return "Welcome to my application!";}
}
注意此處導入的包是import org.slf4j.Logger;
關于Logger的包有很多,注意不要導錯了.
在網頁中訪問:http://localhost:8888/hello
結果如下:
同時再控制臺中我們可以看到以下日志信息:
注意:Spring Boot
還提供了一些特殊的日志記錄器,如logging.file
和logging.path
等,用于指定日志文件的位置和名稱。此外,還可以使用logging.pattern.console
和logging.pattern.file
等屬性來自定義控制臺和文件日志的輸出格式。
下來我們試一下不同日志級別的打印以及日志各部分詳情介紹:
那么就有小伙伴疑惑,為什么`logger.trace(“Hello, trace!”); logger.debug(“Hello,debug!”);``這兩行沒有打印呢?這與日志的級別有關:
三. 日志級別
1. 日志級別有什么用?
日志級別用于控制日志輸出的詳細程度,可以根據需求選擇合適的級別來記錄和查看日志信息。通過設置適當的日志級別,可以靈活地控制日志的輸出量和詳細程度。在開發和調試階段可以使用較低的日志級別(如DEBUG),以獲得更多的信息幫助排查問題。而在生產環境中,可以將日志級別設置為較高的級別(如INFO或WARN),以減少日志輸出并降低對性能的影響。
此外,日志級別還可以根據具體的應用程序需求進行擴展和自定義。例如,可以定義自己的日志級別來表示特定的業務場景或關鍵事件。
2. 日志級別的分類及使用
?志的級別分為:
-
TRACE
(追蹤):最詳細的日志級別,通常用于跟蹤代碼執行路徑、變量狀態等詳細信息。在生產環境中很少使用,因為它會產生大量的日志輸出。 -
DEBUG
(調試):用于開發和調試階段,輸出較為詳細的日志信息,有助于理解代碼的執行過程和檢測問題。在生產環境中一般不建議使用,因為它會產生大量的日志輸出。 -
INFO
(信息):用于輸出重要的業務信息,如應用程序啟動信息、關鍵操作完成信息等。通常會記錄應用程序運行中的重要事件,可以用于監控和分析。 -
WARN
(警告):表示潛在的錯誤情況,可能會導致應用程序出現異常或不正常的行為,但不會造成嚴重的系統故障。例如,某些配置項未設置、數據庫連接超時等。需要引起注意,但不會影響應用程序的正常運行。 -
ERROR
(錯誤):表示發生了可恢復的錯誤,導致應用程序無法正常執行某些功能或服務。例如,數據庫連接失敗、請求處理異常等。需要開發人員關注并及時處理。 -
FATAL
(致命):表示發生了無法恢復的嚴重錯誤,這通常會導致應用程序崩潰或無法繼續執行。例如,關鍵依賴項啟動失敗、文件系統不可用等。
級別越高,接收到的消息就越少,如設置了 warn 就只能收到 warn、error、fatal 級別的日志了。
日志級別配置只需要在配置文件中設置“logging.level
”配置項即可,如下所示:
此時就只打印error級別及以上的日志了:
默認日志輸出級別
清除掉配置?件中的日志設置,觀察控制臺輸?的日志級別。
得到以下結論,日志的輸出級別,默認是 info
四. 日志持久化
上述日志都是輸出在控制臺上的,然而在生產環境上我們需要將日志保存下來,以便出現問題之后追溯問題,把日志保存下來的過程就叫做持久化.以下是在Spring Boot中進行日志持久化的步驟:
- 添加依賴:在項目的
pom.xml
文件中添加日志框架的依賴。可以通過Spring Boot Starter依賴簡化配置的過程,例如對于Logback,可以添加spring-boot-starter-logging
依賴。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></dependency>
- 配置文件:在
application.properties
或application.yml
中進行相應的配置。具體配置方式取決于所選擇的日志框架。
logging:file:
# 設置日志文件的目錄path: E:\\JavaEE\\logger
# 設置日志文件的名字name: E:\\JavaEE\\logger\\SpringBootDemoLog.log
我們可以在E:\\JavaEE\\logger
目錄中看到以下文件:
可以看到文件中記錄了當前運行的日志信息:
五. 更簡單的日志輸出—Lombok
每次都使用 LoggerFactory.getLogger(xxx.class)
很繁瑣,且每個類都添加?遍,也很麻煩,這里講?
種更好?的日志輸出方式,使用 lombok 來更簡單的輸出。
- 添加 lombok 框架?持。
- 使? @slf4j 注解輸出?志。
1. Lombok的使用
添加Lombok依賴:
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency>
package com.example.demo;import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/p")
@Slf4j
public class PersonController {@RequestMapping("/log")public void loggerTest() {log.error("------------------- error -----------------");}
}
運行結果:
2. lombok原理解釋
lombok 能夠打印?志的密碼就在 target ?錄??,target 為項?最終執?的代碼,查看 target ?錄如下:
Java程序運行原理:
Lombok的作用如下圖所示:
Lombok的運行原理是通過注解處理器在編譯時對源代碼進行解析和轉換,生成對應的代碼片段,并將其插入到編譯過程中的抽象語法樹中,從而簡化Java類的編寫。這樣可以減少開發者編寫重復、繁瑣的代碼,提高開發效率。
2.1 Lombok更多注解說明
基本注解:
注解 | 作? |
---|---|
@Getter | ?動添加 getter ?法 |
@Setter | ?動添加 setter ?法 |
@ToString | ?動添加 toString ?法 |
@EqualsAndHashCode | ?動添加 equals 和 hashCode ?法 |
@NoArgsConstructor | ?動添加?參構造?法 |
@AllArgsConstructor | ?動添加全屬性構造?法,順序按照屬性的定義順序 |
@NonNull | 屬性不能為 null |
@RequiredArgsConstructor | ?動添加必需屬性的構造?法,final + @NonNull 的屬性為必需 |
組合注解:
注解 | 作? |
---|---|
@Data | @Getter + @Setter + @ToString +@EqualsAndHashCode +@RequiredArgsConstructor +@NoArgsConstructor |
@Slf4j | 添加?個名為 log 的?志,使? slf4j |