首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java Servlet 開發:為何 Eclipse 控制台無法顯示 System.out.println 輸出?

     編輯:程式設計疑難解答

問題現象

在 `HttpServlet` 的 `doGet` 方法中調用 `System.out.println("請求方式:" + request.getMethod())`,瀏覽器訪問後 Eclipse Console 無任何輸出,但 Tomcat 本地控制台窗口顯示了日誌。

根因分析

Eclipse 內置 Tomcat 與外部獨立 Tomcat 的標準輸出流不同。

  • 場景一:Eclipse 管理 Tomcat(Server 視圖啟動):Tomcat 的 `System.out/err` 重定向到 Eclipse Console 視圖。若無輸出,檢查:
    1. `Server` 視圖中 Tomcat 配置 `Server Locations` 選擇 `Use Tomcat installation`。
    2. 項目 `Deployment Assembly` 正確。
    3. 代碼確實執行(打斷點驗證)。
  • 場景二:外部命令行啟動 Tomcat(`startup.bat/sh`):Tomcat 進程獨立於 Eclipse,其標準輸出流向啟動它的命令行窗口(或 `catalina.out` 日誌文件),Eclipse Console 無法捕獲。這正是題主遇到的情況:「本機控制台啟動的 tomcat,瀏覽器發請求,信息在本機控制台顯示」。

最佳實踐:使用專業日誌框架

生產環境嚴禁使用 `System.out.println`。引入 SLF4J + Logback/Log4j2:

// pom.xml

    ch.qos.logback
    logback-classic
    1.4.11


// Servlet 中
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class RequestDemo1 extends HttpServlet {
    private static final Logger log = LoggerFactory.getLogger(RequestDemo1.class);
    protected void doGet(HttpServletRequest request, HttpServletResponse response) {
        log.info("請求方式:{}", request.getMethod());
        log.info("URI: {}", request.getRequestURI());
        // 日誌輸出到文件、控制台、ELK 等,統一管理
    }
}

配置 logback.xml 輸出到控制台與文件


    
        %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
    
    
        logs/app.log
        
            logs/app.%d{yyyy-MM-dd}.log
        
        %d %p %c - %m%n
    
    
        
        
    

總結

  • Eclipse Console 僅捕獲其自身進程樹內 Tomcat 的標準流。
  • 外部啟動 Tomcat 時,日誌在啟動終端或日誌文件中。
  • 專業開發棄用 `System.out`,改用 SLF4J 門面 + 實現框架,實現日誌級別控制、多輸出目標、結構化日誌。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved