我怀疑它可能是我包括的库,这是我的日志搞乱。这可能吗?
是的。 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