Я пытаюсь встроить Jetty 6.1 в другую программу. Jetty сбрасывает информацию журнала INFO, и мне нужно отключить ее. Есть ли простой способ программно отключить ведение журнала?
Вопрос
Причал: как отключить ведение журнала?
- Вы нашли решение? Как насчет обновить свой пост!?? rafa.ferreira 13.05.2011
Ответы
Ответ 1 · рейтинг 15 · Chris Martin
Более краткая версия ответа Джеффа Черна:
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 · рейтинг 11 · arcuri82
System.setProperty("org.eclipse.jetty.util.log.class", "org.eclipse.jetty.util.log.StdErrLog");
System.setProperty("org.eclipse.jetty.LEVEL", "OFF");
Это сработало для меня, но обязательно вызовите его перед запуском сервера.
Ответ 3 · рейтинг 5 · Jose Damico
В Jetty Embedded вы можете попробовать: org.mortbay.log.Log.setLog(null); Перед вызовом Сервера.
Ответ 4 · рейтинг 3 · Jeff Chern
Мне удалось создать фиктивный регистратор, который отбрасывает все, что он когда-либо запрашивал для регистрации, а затем передавал его в 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;
вместо мортбейных, но они, вероятно, должны вести себя так же (или, по крайней мере, аналогично).
Ответ 5 · рейтинг 3 · Luca Fagioli
Перед запуском сервера установите уровень StdErrLog на WARN:
Properties p = new Properties();
p.setProperty("org.eclipse.jetty.LEVEL", "WARN");
org.eclipse.jetty.util.log.StdErrLog.setProperties(p);
Ответ 6 · рейтинг 2 · Ali Bagheri
Использовать этот
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);
Ответ 7 · рейтинг 1 · FabienB
Глядя на страницу отладки, упомянутую 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, чтобы полностью отключить операторы журналирования причала или сделать его более подробным.
Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.
Похожие материалы
- Ведение журнала приложения в WildFly 9.0.1 FINAL (SL4J + Logback)
- Как автоматически направлять вывод операторов печати в файл в python?
- Нет вывода консоли eclipse с JBOSS EAP6 в автономном режиме
- Объяснение ведения журнала Java
- Встроенный Jetty, обслуживающий статический контент с аутентификацией формы
- Отсутствует заголовок в ответе HTTP из-за CORS