首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 異常日誌落檔工具:自動捕獲堆疊追蹤寫入 TXT 的輕量實作

     編輯:Java 相關知識

生產環境排查利器:統一異常持久化,不漏任何現場

系統上線後,控制台日誌易丟失、難檢索。輕量級 Log 工具類:捕獲 Exception → 組裝時間戳、自定標籤、完整堆疊追蹤 → 追加寫入專案根目錄 log.txt。無第三方依賴,適合中小專案快速接入。

核心功能

  • 自動定位專案根目錄:System.getProperty("user.dir") → 父目錄 → log.txt。
  • 豐富現場資訊:時間戳 yyyy-MM-dd:HH:mm:ss、業務標識 youName、異常 toString()、完整 printStackTrace(PrintWriter)。
  • 追加模式:new FileWriter(file, true) 保留歷史紀錄。
  • 資源安全:flush() + close() 在 finally 隱含保證(範例結構已確保)。

程式碼精簡版

public class Log {
    public void saveLog(Exception e, String tag) {
        try {
            File logFile = new File(System.getProperty("user.dir"), "log.txt");
            try (PrintWriter pw = new PrintWriter(new FileWriter(logFile, true))) {
                pw.println(); // 換行分隔
                pw.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " [" + tag + "]");
                pw.println("************************* " + e + " *************************");
                e.printStackTrace(pw); // 關鍵:將堆疊寫入檔案而非控制台
            }
        } catch (Exception ex) {
            ex.printStackTrace(); // 最後防線:寫檔失敗至少印控制台
        }
    }
}

使用範例

try {
    riskyOperation();
} catch (Exception e) {
    new Log().saveLog(e, "OrderService#createOrder");
    // 可選:拋出業務異常、返回錯誤碼、發送告警
}

進化路線:邁向成熟日誌框架

階段方案關鍵能力
手工自寫 PrintWriter零依賴、極簡
門面SLF4J + Logback/Log4j2等級控制、滾動檔案、非同步、結構化 JSON
雲原生ELK/EFK、Loki、SkyWalking集中收集、全文檢索、鏈路追蹤、告警儀表板

遷移建議

新專案直接引入 spring-boot-starter-logging(內含 Logback),配置 logback-spring.xml 即可獲得生產級能力。舊專案可先用 SLF4J 門面包裝現有 Log 類,再漸進替換底層實作。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved