Jetty: как отключить ведение журнала?

Я пытаюсь вставить Jetty 6.1 в другую программу. Jetty сбрасывает информацию INFO-log, и мне нужно отключить ее. Есть ли простой способ отключить протоколирование журнала?

Ответы

Ответ 1

Более краткий вариант ответа Джеффа Черна:

org.eclipse.jetty.util.log.Log.setLog(new NoLogging())

.

import org.eclipse.jetty.util.log.Logger;

public class NoLogging implements Logger {
    @Override public String getName() { return "no"; }
    @Override public void warn(String msg, Object... args) { }
    @Override public void warn(Throwable thrown) { }
    @Override public void warn(String msg, Throwable thrown) { }
    @Override public void info(String msg, Object... args) { }
    @Override public void info(Throwable thrown) { }
    @Override public void info(String msg, Throwable thrown) { }
    @Override public boolean isDebugEnabled() { return false; }
    @Override public void setDebugEnabled(boolean enabled) { }
    @Override public void debug(String msg, Object... args) { }
    @Override public void debug(Throwable thrown) { }
    @Override public void debug(String msg, Throwable thrown) { }
    @Override public Logger getLogger(String name) { return this; }
    @Override public void ignore(Throwable ignored) { }
}

Ответ 2

System.setProperty("org.eclipse.jetty.util.log.class", "org.eclipse.jetty.util.log.StdErrLog");
System.setProperty("org.eclipse.jetty.LEVEL", "OFF");

Это сработало для меня, но просто не забудьте вызвать его перед запуском сервера.

Ответ 3

В Jetty Embedded вы можете попробовать: org.mortbay.log.Log.setLog(null); Перед вызовом сервера.

Ответ 4

У меня был успех в создании фиктивного регистратора, который отбрасывает все, что он когда-либо просил записать, а затем передавал его в Log.setLog(...).

например.

private static class DummyLogger implements Logger {

    @Override
    public String getName() {
        return "DummyLogger";
    }

    @Override
    public void warn(String msg, Object... args) {}

    @Override
    public void warn(Throwable thrown) {}

    @Override
    public void warn(String msg, Throwable thrown) {}

    @Override
    public void info(String msg, Object... args) {}

    @Override
    public void info(Throwable thrown) {}

    @Override
    public void info(String msg, Throwable thrown) {}

    @Override
    public boolean isDebugEnabled() {return false; }

    @Override
    public void setDebugEnabled(boolean enabled) {}

    @Override
    public void debug(String msg, Object... args) {}

    @Override
    public void debug(Throwable thrown) {}

    @Override
    public void debug(String msg, Throwable thrown) {}

    @Override
    public Logger getLogger(String name) {return this; }

    @Override
    public void ignore(Throwable ignored) {}

}

Для справки я использовал эти пакеты:

import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger;

вместо мертвых, но они должны, вероятно, вести себя одинаково (или, по крайней мере, аналогично).

Ответ 5

Установите уровень StdErrLog на WARN, прежде чем запускать сервер:

Properties p = new Properties();
p.setProperty("org.eclipse.jetty.LEVEL", "WARN");
org.eclipse.jetty.util.log.StdErrLog.setProperties(p);

Ответ 6

Глядя на страницу отладки, упомянутую Vinay:

Jetty использует инфраструктуру протоколирования SLF4J для перехода на ведение журналов для JSP2.0. Это означает, что сообщения commons-log отправляются в интерфейс SLF4J.

Мы отправляем реализацию Simple log, которая выводит только уровень INFO и выше сообщений на stderr.

Однако вы можете заменить Simple log любой другой реализацией журнала SLF4J, удалив lib/jsp-2.0/slf4j-simple-1.0-rc5.jar и скопировав в SLF4J impl по вашему выбору. Основной код Jetty имеет мягкую зависимость от SLF4J, а это означает, что если SLF4J impl обнаружен в пути к классу при запуске, Jetty будет направлять на него все сообщения журнала.

В качестве альтернативы вы можете удалить баночки SLF4J в целом и использовать commons-logging вместо этого, скопировав в банке регистрации сообщений и общедоступный лог-журнал, например log4j, в каталог lib/. Однако, если вы это сделаете, имейте в виду, что, поскольку основной код Jetty не использует commons-logging, он будет записывать сообщения в stderr вместо этого. Читайте дальше, чтобы узнать, как заставить механизм журнала stderr печатать сообщения уровня DEBUG.

Итак, это вопрос размещения правильного файла jar. Например, вы можете поместить совместимый с log4j интерфейс и настроить конфигурационный файл log4j должным образом, чтобы отключить полностью записи журнала записи или быть более подробными.