在我的输出中,我有来自泽西岛的JUL记录消息,如此
03.12.2010 14:14:55 com.sun.jersey.api.core.PackagesResourceConfig init
INFO: Scanning for root resource and provider classes in the packages:
以编程方式我想把它们关掉,所以我尝试了
Logger.getLogger("com.sun.jersey.api.core.PackagesResourceConfig").setLevel( Level.SEVERE );
或
Logger.getLogger("com.sun.jersey").setLevel( Level.SEVERE );
但这不起作用。
这个全局配置很有趣:
Logger.getLogger( "com" ).setLevel( Level.SEVERE );
或
Logger.getLogger( "" ).setLevel( Level.SEVERE );
为什么?
答案 0 :(得分:3)
我遇到了一些问题所以我认为我会将代码放入导入以避免混淆。我测试了它,它可以在我的迷你网络服务器配置中运行。同样,我将完整性包含在整个服务器实现中。
import java.io.IOException;
import java.net.URI;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ws.rs.core.UriBuilder;
import com.sun.jersey.api.container.httpserver.HttpServerFactory;
import com.sun.jersey.api.core.PackagesResourceConfig;
import com.sun.jersey.api.core.ResourceConfig;
import com.sun.net.httpserver.HttpServer;
public class WebServer {
private HttpServer webServer;
private final static Logger COM_SUN_JERSEY_LOGGER = Logger.getLogger( "com.sun.jersey" );
static {
COM_SUN_JERSEY_LOGGER.setLevel( Level.SEVERE );
}
public void start() throws IOException {
System.out.println("Starting WebServer\n");
webServer = createHttpServer();
webServer.start();
System.out.println(String.format("\nWeb Server started:" + "%sapplication.wadl\n", getURI()));
}
public void stop() {
webServer.stop(0);
}
public static HttpServer createHttpServer() throws IOException {
ResourceConfig rc = new PackagesResourceConfig("com.daford");
return HttpServerFactory.create(getURI(), rc);
}
private static URI getURI() {
return UriBuilder.fromUri("http://localhost/").port(4444).build();
}
}
答案 1 :(得分:2)
Logger.getLogger()
返回的记录器为WeakReference
秒。因此,在您设置适当的级别后,它们可能会被垃圾收集,因为您不会保留任何引用,因此会删除您的设置。
将记录器存储在具有适当范围的变量中,以保留您的设置。
答案 2 :(得分:1)
以上对John Smith的信用,但这是使用正确的包名称的一行答案:
Logger.getLogger("org.glassfish.jersey").setLevel(Level.SEVERE);
不需要导入,这些来自java.util。
在Unix Philosophy的沉默规则中,让这一切成为你们所有人的教训:当你没有任何错误的说法时,关闭地狱。
答案 3 :(得分:0)
基本上每个记录器实例都有一个loglevel。但是,当您通过Logger.getLogger()检索记录器实例时,很可能会创建新记录器的新实例。由于您没有保留对Logger的引用,因此它会立即超出范围,并且您的更改将丢失。
Logger.getLogger(“”)和Logger.getLogger(“com”)为您工作的原因是已经为这两个级别创建了持久性记录器,这意味着您正在检索那些保持持久性的记录器。
一个简单的解决方法是在JUL中使用LogManager类:
LogManager.getLogManager().setLevel("com.sun.jersey", Level.SEVERE);
O'reilly上有great article可以帮到你。