Выключение регистрации в Джерси программно - PullRequest
9 голосов
/ 03 декабря 2010

В моем выводе есть сообщения о регистрации в Джули из Джерси, как это

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 );

Почему?

Ответы [ 4 ]

3 голосов
/ 25 ноября 2015

У меня были некоторые проблемы с этим, поэтому я решил добавить код для импорта, чтобы избежать путаницы. Я проверил это, и он работает в конфигурации моего мини веб-сервера. Опять же, я включил всю реализацию сервера для полноты.

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();
    }
}
2 голосов
/ 06 декабря 2010

Регистраторы, возвращаемые Logger.getLogger(), равны WeakReference с.Поэтому непосредственно после того, как вы установите соответствующий уровень, они могут получить мусор, так как вы не сохраняете никаких ссылок на него, тем самым удаляя свои настройки.

Сохраните свой регистратор в переменной с соответствующей областью, чтобы сохранить ваши настройки.

1 голос
/ 08 сентября 2016

Кредиты для Джона Смита выше, но вот однострочный ответ с правильным названием пакета:

Logger.getLogger("org.glassfish.jersey").setLevel(Level.SEVERE);

Нет необходимости импортировать, они приходят из java.util.

И пустьэто будет уроком для всех вас в правиле молчания Unix Philosophy : когда вам нечего сказать, заткнись, черт возьми.

0 голосов
/ 08 декабря 2010

По сути, каждый экземпляр логгера имеет уровень логирования.Однако, когда вы извлекаете экземпляр регистратора с помощью Logger.getLogger (), вы, скорее всего, создаете новый экземпляр нового регистратора.Поскольку вы не сохраняете ссылку на Logger, он мгновенно выходит из области видимости, и ваше изменение теряется.

Причина, по которой у вас работают Logger.getLogger ("") и Logger.getLogger ("com")в том, что постоянные регистраторы уже создаются для этих двух уровней, что означает, что вы извлекаете те регистраторы, которые остаются постоянными.

Одно простое решение - использовать класс LogManager в JUL:

LogManager.getLogManager().setLevel("com.sun.jersey", Level.SEVERE);

На O'reilly есть отличная статья , которая должна вам помочь.

...