Как добавить собственный обработчик журнала в Google App Engine? - PullRequest
5 голосов
/ 23 марта 2012

Я пытаюсь добавить собственный обработчик журнала в мое Java-приложение. Я реализовал класс InnerLogger, который расширяет класс java.util.Logging.Handler. А в моем logging.properties объявлен обработчик:

handlers:com.mycompany.util.InnerLogger

Но когда я запускаю сервер разработки, я получаю следующую ошибку:

Can't load log handler "com.mycompany.util.InnerLogger"
java.lang.ClassNotFoundException: com.mycompany.util.InnerLogger

Я могу добавить свой собственный обработчик в регистраторы один за другим, но мне просто интересно, есть ли способ добавить его во все регистраторы.

Спасибо

Ответы [ 3 ]

3 голосов
/ 15 июня 2012

Мне удалось добавить Handler в корень Logger, когда мое приложение инициализируется.Вы можете поместить этот код в задачу разогрева или в фильтр сервлета.

private static Logger LOG;

...

LOG = Logger.getLogger("");
LOG.addHandler(myCustomHandler);

Это не так изящно, как при использовании logging.properties, но это адекватный обходной путь при работе в GAE.

2 голосов
/ 02 апреля 2012

Возможно, это не то решение, которое вы искали, но рассматривали ли вы возможность использования Simple Logging Facade для Java (SLF4J) в приложении вместо непосредственного использования JUL?

1 голос
/ 21 февраля 2013
    public static void addStreamHandler(){

    // TODO check if appCode has X length
    CustomHandler handler = new CustomHandler();
    LogManager manager = LogManager.getLogManager();
    Enumeration<String> e = manager.getLoggerNames();
    while (e.hasMoreElements()){

        Logger logger = manager.getLogger(e.nextElement());
        if ( logger.getName().startsWith("com.google"))continue;
        logger.addHandler(handler);
        System.out.println(logger.getName());
    }
    System.out.println("***finished*****");
}

public static void removeStreamHandlers(){

    LogManager manager = LogManager.getLogManager();
    Enumeration<String> e = manager.getLoggerNames();
    while (e.hasMoreElements()){

        Logger logger = manager.getLogger(e.nextElement());
        Handler[] handlers = logger.getHandlers();
        for ( int i = 0; i < handlers.length; i++){
            Handler h = handlers[i];
            if (h instanceof CustomHandler){
                logger.removeHandler(h);
                break;
            }
        }
    }
}
...