9

私の出力には、このようなジャージーからの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 );

なぜ?

4

4 に答える 4

3

これにはいくつか問題があったので、混乱を避けるためにインポートにコードを入れようと思いました。これをテストしたところ、ミニ Web サーバー構成で動作します。ここでも、完全を期すためにサーバーの実装全体を含めました。

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();
    }
}
于 2015-11-25T04:07:09.533 に答える
2

によって返されるロガーLogger.getLogger()WeakReferences です。したがって、適切なレベルを設定した直後に、それへの参照を保持しないため、ガベージコレクションが発生する可能性があり、設定が削除されます。

適切なスコープを持つ変数にロガーを保存して、設定を維持します。

于 2010-12-06T19:20:38.633 に答える
0

基本的に、各ロガーインスタンスにはログレベルがあります。ただし、Logger.getLogger()を介してロガーインスタンスを取得すると、新しいロガーの新しいインスタンスが作成される可能性が高くなります。ロガーへの参照を保持していないため、ロガーは即座に範囲外になり、変更は失われます。

Logger.getLogger( "")およびLogger.getLogger( "com")が機能する理由は、これら2つのレベルに対して永続ロガーが既に作成されているためです。つまり、永続性を維持しているロガーを取得しています。

簡単な修正の1つは、JULでLogManagerクラスを使用することです。

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

O'reillyに関するすばらしい記事があります。

于 2010-12-07T22:14:32.720 に答える