2010-12-03 27 views
8

En mi salida tengo mensajes de registro JUL desde Jersey como estoDesconexión Jersey registro mediante programación

03.12.2010 14:14:55 com.sun.jersey.api.core.PackagesResourceConfig init 
INFO: Scanning for root resource and provider classes in the packages: 

programación que quería swich a retirarse por lo que intentó

Logger.getLogger("com.sun.jersey.api.core.PackagesResourceConfig").setLevel(Level.SEVERE); 

o

Logger.getLogger("com.sun.jersey").setLevel(Level.SEVERE); 

pero esto no funciona.

suficiente esta configuración global divertido funciona:

Logger.getLogger("com").setLevel(Level.SEVERE); 

o

Logger.getLogger("").setLevel(Level.SEVERE); 

POR QUÉ?

+0

Esto me molesta también. Si algo está funcionando correctamente, debe callarse. –

Respuesta

2

Los registradores devueltos por Logger.getLogger() son WeakReference s. Entonces, directamente después de establecer el nivel apropiado, es posible que reciban basura, ya que no conserva ninguna referencia a ella, eliminando así su configuración.

Almacene su registrador en una variable con un alcance adecuado para mantener su configuración.

+0

Así que sugiere algo como registrador estático final privado COM_SUN_JERSEY_LOGGER = Logger.getLogger ("com.sun.jersey"); { System.out.println (COM_SUN_JERSEY_LOGGER); COM_SUN_JERSEY_LOGGER.setLevel (Level.SEVERE); } Obtengo un NPE nulo. –

+0

Sí, algo como esto. No puedo reproducir su ejemplo, y nulo no tiene ningún sentido, debe haber algo más que no esté bien. Lo que está haciendo aquí es definir el registrador estático habitual, por lo que no puede iniciar sesión en este espacio de nombres si Logger.getLogger ("...") alguna vez devuelve nulo. – Heri

+2

Ahhh. Funciona con un inicializador estático y no con un bloque de inicializador de objetos. Entonces: Registrador estático final privado COM_SUN_JERSEY_LOGGER = Logger.getLogger ("com.sun.jersey"); estática {COM_SUN_JERSEY_LOGGER.setLevel (Level.SEVERE); } lo hace. –

0

Esencialmente, cada instancia de registrador tiene un nivel de registro. Sin embargo, cuando recupera una instancia de registrador a través de Logger.getLogger(), es más que probable que cree una nueva instancia de un nuevo registrador. Como no está manteniendo una referencia al registrador, al instante sale del alcance y se pierde su cambio.

La razón por la que Logger.getLogger ("") y Logger.getLogger ("com") funcionan para usted es que ya se están creando registradores persistentes para esos dos niveles, lo que significa que está recuperando esos registradores que permanecen persistentes.

Una solución simple es utilizar la clase LogManager en julio:

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

Hay una great article en O'reilly que deberían ayudarle.

+4

LogManager.getLogManager(). SetLevel ("com.sun.jersey", Level.SEVERE); da un error de compilador Usted ha querido decir LogManager.getLogManager(). GetLogger ("com.sun.jersey"). SetLevel (Level.SEVERE) ;? Si, entonces LogManager.getLogManager(). GetLogger ("com.sun.jersey") devolverá nulo, por lo que obtendrá un NPE. –

+2

He visto algunas referencias a este método en otros lugares. Definitivamente no existe en LogManager - http://docs.oracle.com/javase/1.4.2/docs/api/java/util/logging/LogManager.html –

3

Tuve algunos problemas con esto, así que pensé en poner el código en las importaciones para evitar confusiones. Probé esto y funciona en la configuración de mi mini servidor web. Una vez más, incluí la implementación completa del servidor para que esté completo.

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(); 
    } 
} 
+0

Esto no parece funcionar con Jersey 2.7. Tengo sl4j con logback en mi aplicación basada en jersey. Necesita configurar el nivel de registro jersey a WARN. – lochi

+0

Esto tampoco me importó hasta que me di cuenta de que mi registro era 'org.glassfish.jersey'. –

1

Créditos a John Smith anteriores, pero aquí es la respuesta de una línea con el nombre del paquete derecha:

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

No hay importaciones necesarias, éstas provienen de java.util.

Y que esto sea una lección para todos ustedes en la regla de silencio de Unix Philosophy: cuando no tengan nada erróneo que decir, cántense.

+0

Hmmmm, después de volver a leer la pregunta con más cuidado, quizás esto no funcione para el OP. Pero funcionó para mí. –

Cuestiones relacionadas