tool - ¿Cómo puedo deshabilitar el controlador de consola predeterminado, mientras uso la API de registro de Java?
no se han desinstalado las versiones obsoletas de java (5)
Debe indicar a su registrador que no envíe sus mensajes hasta su registrador principal:
...
import java.util.logging.*;
...
Logger logger = Logger.getLogger(this.getClass().getName());
logger.setUseParentHandlers(false);
...
Sin embargo, esto debe hacerse antes de agregar más manejadores al registrador.
Hola, estoy intentando implementar el registro Java en mi aplicación. Quiero usar dos controladores. Un manejador de archivos y mi propio controlador de consola. Mis dos controladores funcionan bien. Mi registro se envía a un archivo y a la consola. Mi registro también se envía al controlador de consola predeterminado, que no quiero. Si ejecuta mi código, verá dos líneas adicionales enviadas a la consola. No quiero usar el controlador de consola predeterminado. ¿Alguien sabe cómo deshabilitar el controlador de consola predeterminado? Solo quiero usar los dos controladores que he creado.
Handler fh = new FileHandler("test.txt");
fh.setFormatter(formatter);
logger.addHandler(fh);
Handler ch = new ConsoleHandler();
ch.setFormatter(formatter);
logger.addHandler(ch);
import java.util.Date;
import java.util.logging.ConsoleHandler;
import java.util.logging.FileHandler;
import java.util.logging.Formatter;
import java.util.logging.Handler;
import java.util.logging.Level;
import java.util.logging.LogManager;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
public class LoggingExample {
private static Logger logger = Logger.getLogger("test");
static {
try {
logger.setLevel(Level.INFO);
Formatter formatter = new Formatter() {
@Override
public String format(LogRecord arg0) {
StringBuilder b = new StringBuilder();
b.append(new Date());
b.append(" ");
b.append(arg0.getSourceClassName());
b.append(" ");
b.append(arg0.getSourceMethodName());
b.append(" ");
b.append(arg0.getLevel());
b.append(" ");
b.append(arg0.getMessage());
b.append(System.getProperty("line.separator"));
return b.toString();
}
};
Handler fh = new FileHandler("test.txt");
fh.setFormatter(formatter);
logger.addHandler(fh);
Handler ch = new ConsoleHandler();
ch.setFormatter(formatter);
logger.addHandler(ch);
LogManager lm = LogManager.getLogManager();
lm.addLogger(logger);
} catch (Throwable e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
logger.info("why does my test application use the standard console logger ?/n" + " I want only my console handler (Handler ch)/n " + "how can i turn the standard logger to the console off. ??");
}
}
El controlador de consola predeterminado se adjunta al registrador de raíz, que es el padre de todos los demás registradores, incluido el suyo. Entonces veo dos formas de resolver su problema:
Si esto solo afecta a esta clase particular suya, la solución más simple sería desactivar el pasar los registros al registrador padre:
logger.setUseParentHandlers(false);
Si desea cambiar este comportamiento para toda su aplicación, puede eliminar por completo el controlador de consola predeterminado del registrador de raíz antes de agregar sus propios manejadores:
Logger globalLogger = Logger.getLogger("global");
Handler[] handlers = globalLogger.getHandlers();
for(Handler handler : handlers) {
globalLogger.removeHandler(handler);
}
Nota: si desea utilizar los mismos controladores de registro en otras clases también, la mejor manera es mover la configuración de registro en un archivo de configuración a largo plazo.
Esto es extraño, pero Logger.getLogger("global")
no funciona en mi configuración ( Logger.getLogger(Logger.GLOBAL_LOGGER_NAME)
en Logger.getLogger(Logger.GLOBAL_LOGGER_NAME)
).
Sin embargo, Logger.getLogger("")
hace bien el trabajo.
Espero que esta información también ayude a alguien ...
Restablezca la configuración y establezca el nivel raíz en OFF
LogManager.getLogManager().reset();
Logger globalLogger = Logger.getLogger(java.util.logging.Logger.GLOBAL_LOGGER_NAME);
globalLogger.setLevel(java.util.logging.Level.OFF);
Solo haz
LogManager.getLogManager().reset();