2010-01-22 3 views
14

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

+4

Вы нашли решение? Как насчет обновления вашего сообщения! ?? –

ответ

5

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

+1

Подсказка: ** перед тем, как сервер вызова вызова важен –

3

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

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

1

Глядя на debugging page упомянутой Вине:

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

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

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

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

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

3

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

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

Это похоже на работу, хотя нет опции «НЕТ». 'ожидая только [ALL, DEBUG, INFO, WARN]' –

+0

@ThomasAhle это правда, но я согласен с их выбором. На самом деле не рекомендуется помешать появлению ошибок в журнале. –

+0

@ThomasAhle Кажется, есть опция 'OFF', хотя:' $ {name | hierarchy} .LEVEL = (ВСЕ | DEBUG | INFO | WARN | OFF) ', источник: http://download.eclipse.org/jetty /9.3.6.v20151106/apidocs/org/eclipse/jetty/util/log/StdErrLog.html – m4rtin

11

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

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) { } 
} 
+0

Примечание: это не подходит для Jetty 6.1 (в качестве указанного вопроса). Пакетное пространство 'org.eclipse.jetty' не существовало до тех пор, пока Jetty 7.0 –

+0

. Ответ ниже на @ arcuri82 - самая подходящая конфигурация (без пользовательского кода) для достижения конечной цели. –

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

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

+0

Это правильный ответ для Jetty 7.0+ –

+0

Это работает, спасибо! – Ehsan

Смежные вопросы