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