Ведение журнала не отображается

Я использую JUL в моем приложении. Обычно Netbeans открывает вкладку вывода с надписью "Tomcat" и показывает журналы, которые я создаю. Работало нормально. Но вдруг я понимаю, что мои журналы не отображаются вообще, только System.out распечатать. Даже не самый высокий LOG.log(Level.SEVERE, "....,

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

Я подозреваю, что это может быть библиотека, которую я включил, которая портит мои журналы. Это вообще возможно? Может ли librray изменить способ отображения моих логов? Как я могу исследовать это, так как я немного потерян?

1 ответ

Решение

Я подозреваю, что это может быть библиотека, которую я включил, которая портит мои журналы. Это вообще возможно?

Да. Мост от JUL до SLF4J может удалить консольный обработчик из корневого регистратора JUL. Некоторые библиотеки вызывают LogManager.reset который может удалить и закрыть все обработчики.

Может ли библиотека изменить способ отображения моих журналов?

Да. После установки моста журнала записи JUL больше не форматируются средствами форматирования JUL.

Как я могу исследовать это, так как я немного потерян?

Для изменения дерева регистратора требуются разрешения, поэтому вы можете установить SecurityManager со всеми разрешениями, но затем включить трассировку отладки с -Djava.security.debug="access,stack", чтобы определить, кто вызывает изменение дерева регистратора.

Если это не сработает, вы можете использовать хороший оле 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();
        }
    }
}
Другие вопросы по тегам