問題
使用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
原創文章,歡迎轉載,轉載請注明出處!