JAVA Log 日志級別和使用配置示例
一、主流日志框架
1. Logback (推薦)
Spring Boot默認(rèn)日志框架
2. Log4j2
高性能日志框架
3. SLF4J + Logback (最常用組合)
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MyClass {
private static final Logger logger = LoggerFactory.getLogger(MyClass.class);
}二、日志級別詳解
日志級別從低到高:
| 級別 | 描述 | 使用場景 |
|---|---|---|
| TRACE | 最詳細(xì)的跟蹤信息 | 方法進(jìn)入退出、詳細(xì)流程跟蹤 |
| DEBUG | 調(diào)試信息 | 開發(fā)階段的調(diào)試信息 |
| INFO | 重要的運行信息 | 系統(tǒng)啟動、關(guān)鍵業(yè)務(wù)流程 |
| WARN | 警告信息 | 不影響系統(tǒng)運行的異常情況 |
| ERROR | 錯誤信息 | 需要關(guān)注的處理錯誤 |
| FATAL | 致命錯誤 | 導(dǎo)致系統(tǒng)崩潰的錯誤 |
級別關(guān)系:
TRACE < DEBUG < INFO < WARN < ERROR < FATAL
三、配置示例
1. Logback配置 (logback-spring.xml)
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 控制臺輸出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 文件輸出 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<!-- 異步日志 -->
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender">
<appender-ref ref="FILE"/>
<queueSize>512</queueSize>
</appender>
<!-- 日志級別配置 -->
<root level="INFO">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="ASYNC"/>
</root>
<!-- 包級別日志 -->
<logger name="com.example.service" level="DEBUG"/>
<logger name="org.springframework" level="WARN"/>
</configuration>2. Log4j2配置
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<RollingFile name="File" fileName="logs/app.log"
filePattern="logs/app-%d{yyyy-MM-dd}-%i.log">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy/>
<SizeBasedTriggeringPolicy size="100 MB"/>
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="Console"/>
<AppenderRef ref="File"/>
</Root>
</Loggers>
</Configuration>四、使用技巧和最佳實踐
1. 正確的日志記錄方式
@Service
public class UserService {
private static final Logger logger = LoggerFactory.getLogger(UserService.class);
public User getUserById(Long id) {
// 使用占位符,避免字符串拼接
logger.debug("查詢用戶信息, userId: {}", id);
try {
User user = userRepository.findById(id);
if (user != null) {
logger.info("成功查詢用戶: {}", user.getUsername());
} else {
logger.warn("用戶不存在, userId: {}", id);
}
return user;
} catch (Exception e) {
logger.error("查詢用戶失敗, userId: {}", id, e);
throw new RuntimeException("查詢用戶失敗", e);
}
}
// 使用條件判斷提升性能
public void processData(List<String> data) {
if (logger.isDebugEnabled()) {
logger.debug("處理數(shù)據(jù), 數(shù)據(jù)量: {}, 內(nèi)容: {}", data.size(), data);
}
// 復(fù)雜處理邏輯...
}
}2. 異常日志記錄
public class ExceptionHandlingExample {
// 不好的方式 - 丟失堆棧信息
public void badExceptionLogging() {
try {
// 業(yè)務(wù)代碼
} catch (Exception e) {
logger.error("操作失敗: " + e.getMessage()); // 錯誤!
}
}
// 好的方式 - 完整異常信息
public void goodExceptionLogging() {
try {
// 業(yè)務(wù)代碼
} catch (BusinessException e) {
logger.warn("業(yè)務(wù)異常, 用戶ID: {}, 操作: {}", userId, operation, e);
} catch (Exception e) {
logger.error("系統(tǒng)異常, 用戶ID: {}, 操作: {}", userId, operation, e);
}
}
}3. 性能敏感場景的日志優(yōu)化
public class PerformanceSensitiveClass {
public void highPerformanceMethod() {
// 使用lambda延遲計算,避免不必要的字符串構(gòu)建
logger.debug("處理請求參數(shù): {}", () -> buildExpensiveLogMessage());
// 或者使用條件判斷
if (logger.isDebugEnabled()) {
logger.debug("詳細(xì)數(shù)據(jù): {}", expensiveDataToString());
}
}
private String buildExpensiveLogMessage() {
// 構(gòu)建復(fù)雜的日志消息
return "expensive message";
}
}五、環(huán)境特定的日志配置
application.yml (Spring Boot)
logging:
level:
com.example: DEBUG
org.springframework: WARN
file:
name: logs/app.log
pattern:
console: "%d{yyyy-MM-dd HH:mm:ss} - %logger{36} - %msg%n"
file: "%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n"- 選擇合適的日志級別:生產(chǎn)環(huán)境用INFO,開發(fā)環(huán)境用DEBUG
- 使用占位符:避免不必要的字符串拼接
- 合理記錄異常:總是傳遞異常對象給logger
- 性能考慮:在循環(huán)或高性能代碼中使用條件判斷
- 使用MDC:便于日志追蹤和排查問題
- 異步日志:在高并發(fā)場景下使用異步日志提升性能
- 日志輪轉(zhuǎn):配置合理的日志文件大小和保存時間
到此這篇關(guān)于JAVA Log 日志級別和使用技巧的文章就介紹到這了,更多相關(guān)java log日志級別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java?ASM使用logback日志級別動態(tài)切換方案展示
- Java基于logback?MessageConverter實現(xiàn)日志脫敏方案分析
- Spring Boot中集成各種日志框架Logback、Log4j2和Java Util Logging的步驟和示例代碼
- Java中的logback標(biāo)記日志過濾器MarkerFilter詳解
- Java面試Logback打印日志如何獲取當(dāng)前方法名稱題解
- Java的logback自定義日志脫敏組件詳解
- Java日志logback的使用配置和logback.xml解讀
- Java logback日志的簡單使用
- Java日志框架之logback使用詳解
相關(guān)文章
SpringBoot啟動時如何通過啟動參數(shù)指定logback的位置
這篇文章主要介紹了SpringBoot啟動時如何通過啟動參數(shù)指定logback的位置,在spring boot中,使用logback配置的方式常用的有兩種,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07
SpringBoot項目從開發(fā)到打包發(fā)布的完整教程
本文手把手帶你從零搭建 SpringBoot 項目,實現(xiàn)Redis 緩存 + MySQL 日志 + 第三方接口調(diào)用,并完成服務(wù)器打包部署,全程與 Node.js 對比,新手也能快速上手,需要的朋友可以參考下2026-04-04
Java 使用 HttpClient 發(fā)送 GET請求和 POST請求
本文主要介紹了Java 使用 HttpClient 發(fā)送 GET請求和 POST請求,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-08-08
類似Object監(jiān)視器方法的Condition接口(詳解)
下面小編就為大家?guī)硪黄愃芆bject監(jiān)視器方法的Condition接口(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05
Java連接Mysql數(shù)據(jù)庫詳細(xì)代碼實例
這篇文章主要介紹了Java連接Mysql數(shù)據(jù)庫詳細(xì)代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-02-02
Java為何需要平衡方法調(diào)用與內(nèi)聯(lián)
這篇文章主要介紹了Java為何需要平衡方法調(diào)用與內(nèi)聯(lián),幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2021-01-01
深度解析Spring Boot dataSource與Starter
在Spring Boot開發(fā)中,數(shù)據(jù)源和Starter是極易混淆的核心概念,本文通過「改造前 vs 改造后」的對比,幫你直觀理解兩者的本質(zhì)與價值,徹底解決“該導(dǎo)哪個依賴、該怎么配”的困惑,感興趣的朋友跟隨小編一起看看吧2026-03-03
spring定時任務(wù)執(zhí)行兩次及tomcat部署緩慢問題的解決方法
這篇文章主要給大家介紹了關(guān)于spring定時任務(wù)執(zhí)行兩次及tomcat部署緩慢問題的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01

