簡體   English   中英

靜態初始化程序中的System.out.println顯然輸出兩次

[英]System.out.println in static initializer apparently outputting twice

在我在Tomcat上部署的應用程序中,有一個類如下:

import java.util.logging.Level;
import java.util.logging.Logger;

public abstract class ServiceEndpointApplication extends Application {

    final static String LOGGER_NAME = "test";

    static {
        System.out.println("static init start");
        Logger logger = Logger.getLogger(LOGGER_NAME);
        logger.setLevel(Level.OFF);
        System.out.println("static init end");
    }
    ...
}

在啟動Tomcat之后,我使用JMeter發送了50個請求(50個線程,1個加速期,1個循環)。

然后tail -f catalina.out顯示以下日志:

Nov 06, 2018 1:36:57 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 64126 ms
static init start
static init end
static init end

static init end顯示兩次!

這種行為發生的概率約為10%。

我的問題

這種奇怪行為的可能原因是什么?

環境

  • Java的

    • java版“1.7.0_80”
    • Java(TM)SE運行時環境(版本1.7.0_80-b15)
    • Java HotSpot(TM)64位服務器VM(內置24.80-b11,混合模式)
  • Tomcat 7.0.59

我發現了原因。 這是由tail命令的-f選項引起的。

我重現了這個行為:

$ tail -f catalina.out
  ...
Nov 06, 2018 7:18:17 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 62601 ms
static init start
static init end
static init end

然后我沒有任何選擇跑tail

$ tail catalina.out 
  ...
Nov 06, 2018 7:18:17 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 62601 ms
static init start
static init end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM