记录未显示

我在我的应用程序中使用JUL。 通常,Netbeans会打开一个输出选项卡,其中显示“Tomcat”并显示我生成的日志。 它工作正常。 但突然之间,我意识到我的日志根本没有显示,只有System.out被打印出来。 甚至不是最高的LOG.log(Level.SEVERE, ".... Level.SEVERE LOG.log(Level.SEVERE, "....

 } catch(Exception e) { System.out.println("This gets printed in Netbeans tab"); LOG.log(Level.SEVERE, "This doesnt"); } 

我怀疑它可能是我包含的库,这会弄乱我的日志。 这有可能吗? librray可以改变我的日志显示方式吗? 我怎么能调查这个,因为我有点迷失?

我怀疑它可能是我包含的库,这会弄乱我的日志。 这有可能吗?

是。 JUL到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 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(); } } }