我懷疑它可能是我包括的庫,這是我的日誌搞亂。這可能嗎?
是的。 JUL to SLF4J Bridge可以從JUL根記錄器中刪除控制檯處理程序。一些庫調用LogManager.reset
可以刪除和關閉所有處理程序。
圖書館可以改變我的日誌顯示方式嗎?
是的。一旦安裝了日誌橋,JUL記錄將不再由JUL格式化程序格式化。
我該如何調查這一點,因爲我有點失落?
修改記錄樹需要的權限,所以你可以安裝所有權限的SecurityManager但隨後打開調試與-Djava.security.debug="access,stack"跟蹤,以確定正在修改記錄儀樹調用者。
如果這不起作用,您可以使用good ole'System.out
在加載庫之前和之後打印記錄器樹和附加的處理程序。然後開始添加刪除庫,直到看到記錄器更改。
import java.io.PrintStream;
import java.util.Enumeration;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.Logger;
public class DebugLogging {
private static final Logger log = Logger.getLogger("test");
public static void main(String[] a) {
log.log(Level.FINEST, "Finest");
log.log(Level.FINER, "FINER");
log.log(Level.FINE, "FINE");
log.log(Level.CONFIG, "CONFIG");
log.log(Level.INFO, "INFO");
log.log(Level.WARNING, "WARNING");
log.log(Level.SEVERE, "SEVERE");
log.finest("Finest Log");
log.finer("Finer Log");
log.fine("Fine Log");
log.config("Config Log");
log.info("Info Log");
log.warning("Warning Log");
log.severe("Severe Log");
printConfig(System.err);
}
private static void printConfig(PrintStream ps) {
LogManager lm = LogManager.getLogManager();
ps.append("LogManager=").println(lm.getClass().getName());
synchronized (lm) {
Enumeration<String> e = lm.getLoggerNames();
while (e.hasMoreElements()) {
Logger l = lm.getLogger(e.nextElement());
if (l != null) {
print(l, ps);
}
}
}
}
private static void print(Logger l, PrintStream ps) {
String scn = l.getClass().getSimpleName();
ps.append("scn=").append(scn).append(", n=").append(l.getName())
.append(", uph=").append(String.valueOf(l.getUseParentHandlers()))
.append(", l=").append(String.valueOf(l.getLevel()))
.append(", fl=").println(l.getFilter());
for (Handler h : l.getHandlers()) {
ps.append("\t").append(l.getName()).append("->")
.append(h.getClass().getName()).append(", h=")
.append(String.valueOf(h.getLevel())).append(", fl=")
.append(String.valueOf(h.getFilter())).println();
}
}
}
我一直在嘗試運行此代碼,但我不知道在哪裏。所以我使用加載我的依賴的Maven ...潛在的罪犯是 - Apache Shiro,shiro的擴展和數據庫依賴。但我不確定將它放入我的應用程序中以便在它們加載之前執行 – user1156544
@ user1156544從執行代碼並捕獲結果開始。如果沒有處理程序或級別設置不正確,那就給你一個起點。 – jmehrens
是的,我做到了。我在其中一個類中執行了代碼,結果得到了很多像這樣的打印行...... – user1156544