天天看點

Tomcat控制台總是列印日志問題的解決辦法

問題

使用gradle啟動項目,在tomcat控制台中不停地列印perf4j性能日志,導緻開發過程很卡很慢。明明修改了logback.xml配置檔案,讓它輸出到log檔案中,而不是控制台,但是不起作用。

Tomcat控制台總是列印日志問題的解決辦法

在Windows系統中,在啟動tomcat後會出現上圖這樣的情況,

在ubuntu系統中,沒有這種情況,應該是在ubuntu系統中,沒有tomcat的控制台吧。

同樣,部署線上上的時候也沒有問題。

唯獨在windows中進行開發的時候有問題。

解決過程

真的是嘗試很久很久。

  剛開始調整日志列印路徑,無果;

  然後就是調整日志列印級别,隻列印Error的,這個實作了,卻仍然列印;

  最後決定替換tomcat的Jar包裡的代碼,不讓它列印日志了,解決問題。

Jar包中性能列印的語句為:

StopWatch stopWatch = new Log4JStopWatch("Messages.searchFiles");

try {

  ......

} finally {

  stopWatch.stop();

}

調用的perf4j-*.jar包中的方法

public Log4JStopWatch(String tag) {

  this(tag, null, Logger.getLogger(DEFAULT_LOGGER_NAME), Level.INFO, Level.WARN);

}

而這個方法最終列印在控制台上的語句為:

protected void log(String stopWatchAsString, Throwable exception) {

  logger.log((exception == null) ? normalPriority : exceptionPriority, stopWatchAsString, exception);

}

再跟蹤這個方法,跳轉到了log4j-*.jar包中的 Category.java類中的log 方法

public void log(Priority priority, Object message, Throwable t) {

  if(repository.isDisabled(priority.level)) {

    return;

  }

  if(priority.isGreaterOrEqual(this.getEffectiveLevel()))

  forcedLog(FQCN, priority, message, t);

}

再跳轉時:

protected void forcedLog(String fqcn, Priority level, Object message, Throwable t) {

  callAppenders(new LoggingEvent(fqcn, this, level, message, t));

}

再往後就是具體列印的方法了。

之前問題的所有列印日志的方法都會走到這裡,于是我把這個jar包中的log方法和forcedLog方法的内容都删除了,然後替換原來的log4j-*.jar包,實作效果。

這裡提供一個修改後的jar包:

  連結:https://pan.baidu.com/s/1078F50P8UuWW-Hgxt36QbQ  密碼:j4w9

但如果是maven項目,不能直接替換jar包,可以根據tomcat的加載優先級,将修改後的jar包放到tomcat 中的lib 目錄下進行覆寫

具體參考:http://www.cnblogs.com/acm-bingzi/p/webModifyJar.html

原創文章,歡迎轉載,轉載請注明出處!