我在应用程序中使用JUL。通常,Netbeans打开一个输出选项卡,该选项卡显示“ Tomcat”并显示我生成的日志。运行正常。但是突然间,我意识到我的日志根本没有显示,只有System.out打印出来。甚至都不是最热情的人LOG.log(Level.SEVERE, "....。
System.out
LOG.log(Level.SEVERE, "....
} catch(Exception e) { System.out.println("This gets printed in Netbeans tab"); LOG.log(Level.SEVERE, "This doesnt"); }
我怀疑这可能是我包含的图书馆,这使我的日志混乱了。那有可能吗?图书馆可以改变我的日志显示方式吗?由于我有点迷路,我该如何调查?
我怀疑这可能是我包含的图书馆,这使我的日志混乱了。那有可能吗?
是。从JUL到SLF4J的桥可以从JUL根记录器中删除控制台处理程序。一些库调用LogManager.reset可以删除和关闭所有处理程序。
LogManager.reset
图书馆可以更改我的日志显示方式吗?
是。一旦安装了日志桥,JUL记录器就不再格式化JUL记录。
由于我有点迷路,我该如何调查?
修改记录器树需要权限,因此您可以安装具有所有权限的SecurityManager,然后使用-Djava.security.debug =“ access,stack”打开调试跟踪以确定正在修改记录器树的调用者。
如果这样不起作用,则可以System.out在加载库之前和之后使用ole’ 打印记录器树和附加的处理程序。然后开始添加删除库,直到看到记录器更改为止。
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(); } } }