Jetty:如何禁用日志记录?

时间:2010-01-22 20:44:38

标签: logging jetty

我正在尝试将Jetty 6.1嵌入另一个程序中。 Jetty正在转储INFO-log信息,我需要将其关闭。是否有一种简单的方法来禁用logmaticaly的记录?

8 个答案:

答案 0 :(得分:13)

Jeff Chern答案的更简洁版本:

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

答案 1 :(得分:7)

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

这对我有用,但只需确保在启动服务器之前调用它。

答案 2 :(得分:5)

在Jetty Embedded中你可以尝试:org.mortbay.log.Log.setLog(null);在致电服务器之前。

答案 3 :(得分: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,但他们应该表现得相同(或至少类似)。

答案 4 :(得分:3)

在启动服务器之前将StdErrLog级别设置为WARN

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

答案 5 :(得分:1)

看看Vinay提到的debugging page

  

Jetty使用SLF4J日志记录基础结构桥接到JSP2.0的commons-logging。这意味着将公共日志消息发送到SLF4J接口。

     

我们发布了简单的日志实现,它只会向stderr输出INFO级别及以上的消息。

     

但是,您可以通过删除lib / jsp-2.0 / slf4j-simple-1.0-rc5.jar并复制您选择的SLF4J impl,将Simple日志替换为任何其他SLF4J日志实现。核心Jetty代码对SLF4J具有软依赖性,这意味着如果在启动时在类路径上找到SLF4J impl,Jetty会将所有日志消息指向它。

     

或者,您可以完全删除SLF4J jar并使用commons-logging,而不是通过将commons-logging jar和commons-logging兼容的log impl(例如log4j)复制到lib /目录。但是,如果您这样做,请注意,由于核心Jetty代码不使用commons-logging,它会将消息记录到stderr。继续阅读以了解如何使用stderr日志机制来打印DEBUG级别的消息。

所以这是放置正确的jar文件的问题。例如,您可以放置​​一个log4j兼容接口并正确配置您的log4j配置文件,以完全静音Jetty的日志记录语句或更加详细。

答案 6 :(得分:0)

使用此

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 :(得分:0)

添加配置

log4j.category.org.eclipse.jetty=error

在文件src/main/resources/log4j.properties