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