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

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


person user257087    schedule 22.01.2010    source источник
comment
Вы нашли решение? Как насчет обновить свой пост!??   -  person rafa.ferreira    schedule 13.05.2011


Ответы (7)


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

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) { }
}
person Chris Martin    schedule 27.09.2013
comment
Примечание: это не подходит для Jetty 6.1 (как указано в вопросе). Пакетное пространство org.eclipse.jetty не существовало до Jetty 7.0. - person Joakim Erdfelt; 01.06.2017
comment
Ответ ниже от @arcuri82 является наиболее подходящей конфигурацией (без пользовательского кода) для достижения вашей конечной цели. - person Joakim Erdfelt; 01.06.2017
comment
@JoakimErdfelt Это решение сработало для меня лучше, чем решение @arcuri82 - этот подход все же оставил одно раздражающее сообщение в журнале: 2018-12-26 17:20:31.752:INFO::main: Logging initialized @943ms to org.eclipse.jetty.util.log.StdErrLog - person Egor Nepomnyaschih; 26.12.2018
comment
@EgorNepomnyaschih, вы можете преодолеть это, установив org.eclipse.jetty.util.log.announce=false. - person acm; 27.12.2018

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

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

person arcuri82    schedule 20.04.2017

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

person Jose Damico    schedule 18.01.2011
comment
подсказка: важно до вызова сервера - person Hernán Eche; 03.08.2016

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

E.g.

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;

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

person Jeff Chern    schedule 12.09.2012

Перед запуском сервера установите уровень StdErrLog на WARN:

Properties p = new Properties();
p.setProperty("org.eclipse.jetty.LEVEL", "WARN");
org.eclipse.jetty.util.log.StdErrLog.setProperties(p);
person Luca Fagioli    schedule 27.03.2013
comment
Кажется, это работает, хотя нет опции NONE. expecting only [ALL, DEBUG, INFO, WARN] - person Thomas Ahle; 28.03.2014
comment
@ThomasAhle это правда, но я согласен с их выбором. Это не очень хорошая идея, чтобы предотвратить появление какой-либо ошибки в журнале. - person Luca Fagioli; 31.03.2014
comment
@ThomasAhle Кажется, есть вариант OFF: ${name|hierarchy}.LEVEL=(ALL|DEBUG|INFO|WARN|OFF), источник: download.eclipse.org/jetty/9.3.6.v20151106/apidocs/org/eclipse/ - person m4rtin; 10.12.2015

Использовать этот

org.eclipse.jetty.util.log.Log.setLog(new jettyNoLog());
Logger.getLogger(jettyNoLog.class.getName()).setLevel(Level.OFF);
org.eclipse.jetty.util.log.Log.getProperties().setProperty("org.eclipse.jetty.LEVEL", "OFF");
org.eclipse.jetty.util.log.Log.getProperties().setProperty("org.eclipse.jetty.util.log.announce", "false");
org.eclipse.jetty.util.log.Log.getRootLogger().setDebugEnabled(false);
person Ali Bagheri    schedule 30.10.2018
comment
Настройка announce особенно хороша. - person Terje Dahl; 12.09.2019

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

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

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

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

Кроме того, вы можете полностью удалить файлы JAR SLF4J и вместо этого использовать журналирование общих данных, скопировав файл jar журналов общих данных и импл журнала, совместимый с общими журналами, например log4j, в каталог lib/. Однако, если вы это сделаете, имейте в виду, что, поскольку основной код Jetty не использует журналирование общих ресурсов, вместо этого он будет регистрировать сообщения в stderr. Читайте дальше, чтобы узнать, как заставить механизм журнала stderr печатать сообщения уровня DEBUG.

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

person FabienB    schedule 10.01.2013