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


問題

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

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

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM