Причал: как отключить ведение журнала? - PullRequest
15 голосов
/ 22 января 2010

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

Ответы [ 7 ]

13 голосов
/ 28 сентября 2013

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

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) { }
}
7 голосов
/ 20 апреля 2017
System.setProperty("org.eclipse.jetty.util.log.class", "org.eclipse.jetty.util.log.StdErrLog");
System.setProperty("org.eclipse.jetty.LEVEL", "OFF");

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

5 голосов
/ 18 января 2011

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

3 голосов
/ 27 марта 2013

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

Properties p = new Properties();
p.setProperty("org.eclipse.jetty.LEVEL", "WARN");
org.eclipse.jetty.util.log.StdErrLog.setProperties(p);
3 голосов
/ 13 сентября 2012

Я успешно создал фиктивный логгер, который отбрасывает все, что когда-либо просили регистрировать, и затем передает его в 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;

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

1 голос
/ 10 января 2013

Просмотр страницы отладки , упомянутой Vinay:

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

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

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

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

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

0 голосов
/ 30 октября 2018

Используйте это

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);
...