Как я могу изменить формат журнала в Google AppEngine

AppEngine использует JUL для ведения журнала, и я настроил файл logging.properties и ссылку на него в appengine-web.xml.

Проблема в том, что формат, в котором AppEngine представляет данные в журнале консоли, усекается примерно после 180 символов в каждой строке журнала. И поскольку большая часть этого связана с именем метода и класса (включая пакет) и датой, фактическое сообщение журнала выходит не так уж много.

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

Я понимаю, что могу передать весь свой журнал через slf4j, logback или log4j, но я считаю, что это приводит к тому, что весь такой журнал отображается как стандартный вывод в консоли журнала AppEngine, которая имеет свой собственный стиль детализации.

Есть ли способ определить определенный формат для журнала AppEngine, и если да, то как? этого было бы достаточно, если бы каждая строка журнала не усекалась до 180 символов.


person William    schedule 01.10.2012    source источник
comment
У меня такая же проблема. Я создал собственный форматтер и указал его в своих logging.properties, но он, похоже, полностью игнорируется appengine. Я почти уверен, что мой файл logging.properties подхватывается, потому что изменение уровня журнала действительно работает.   -  person sappenin    schedule 14.10.2012
comment
Хороший вопрос, но я думаю, что резюме вводит в заблуждение: проблема в том, что строки журнала, отображаемые в консоли движка приложения, усекаются.   -  person Tom    schedule 09.11.2012


Ответы (3)


Пробовали ли вы использовать функцию загрузки журналов: она не усекает журналы, вы видите все и можете указать количество дней и серьезность записей журнала для загрузки.

C:\eclipse\plugins\com.google.appengine.eclipse.sdkbundle_1.7.2.1\appengine-java-sdk-1.7.2.1\bin>appcfg.cmd --severity=DEBUG --num_days=2 request_logs C:\workspace\my_app\war C:\workspace\MY_LOGS.TXT

<path to SDK>/appcfg.cmd --severity=DEBUG --num_days=2 request_logs <path to war> <path to log>

Это единственный способ, которым я нашел возможность видеть свои данные журнала. Уровень журнала по умолчанию — INFO, поэтому вам действительно нужно использовать аргументы серьезности и num_days, чтобы он был полезен.

Кроме того, если вы хотите загрузить журналы для серверной части, вам необходимо указать версию серверной части, используя следующую опцию в командной строке. Где worker — это имя бэкенда.

 --version=worker
person Greg Pastik    schedule 16.10.2012

Покопавшись в этом немного дальше, я не смог получить пользовательский обработчик или форматтер JUL, чтобы его забрала среда выполнения appengine. Поэтому вместо этого я создал ServletContextListener для инициализации корневого регистратора с помощью моего собственного форматирования следующим образом:

<listener>
   <listener-class>MyLoggingListener</listener-class>
</listener>

Вот пример ServletContextListener:

public class MyLoggingListener implements ServletContextListener
{
    private static Logger LOG;

    @Override
    public void contextInitialized(ServletContextEvent sce)
    {
        LOG = Logger.getLogger("");
        Handler[] handlers = LOG.getHandlers();
        for (Handler handler : handlers)
        {
            handler.setFormatter(new MyLogFormatter());
        }
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce)
    {}
}

Обновление: приведенный выше код работает в среде разработки, но, похоже, игнорируется в Appengine. Вернемся к чертежной доске.

person sappenin    schedule 14.10.2012

Просматривая исходный код самого инструмента настройки механизма приложений, я увидел, что все, что он делает, это вызывает тот же LogService, к которому у вас будет доступ через LogService API.

Поэтому ответ на ваш вопрос на самом деле так же прост, как перетаскивание кода по следующей ссылке в вашу кодовую базу, чтобы он был доступен только пользователю с правами администратора, и проблема была решена.

https://developers.google.com/appengine/docs/java/logservice/overview

person Greg Pastik    schedule 22.10.2012
comment
Что ж, кажется массовым излишеством жестко кодировать страницу для извлечения журналов в лучшем формате, потому что AppEngine, похоже, не способен (или никто не знает, как) настроить Formatter для работающего регистратора. Но, черт возьми, я думаю, это отвечает на мои вопросы, спасибо. - person William; 23.10.2012
comment
Последнее замечание: я понял, что нажатие на значок плюса расширяет строки журнала, чтобы показать полную запись журнала. Так что у меня есть доступ к моей полной записи, просто она в несколько неуклюжем формате. - person William; 23.10.2012