util logger create java logging

logger - Registro de Java: ¿cómo redirigir la salida a un archivo de registro personalizado para un registrador?



logger java definition (3)

la propiedad de patrón ligeramente confusa de FileHandler se puede utilizar para esto

handlers=java.util.logging.FileHandler # Default global logging level. .level=INFO #logging level for the foo.bar package foo.bar.level=CONFIG java.util.logging.FileHandler.pattern=%h/java%u.log

Un patrón consiste en una cadena que incluye los siguientes componentes especiales que se reemplazarán en el tiempo de ejecución:

"/" el separador de ruta de acceso local

"% t" el directorio temporal del sistema

"% h" el valor de la propiedad del sistema "user.home"

"% g" el número de generación para distinguir los registros girados

"% u" un número único para resolver conflictos

"%%" se traduce en un solo signo de porcentaje "%"

Si desea iniciar sesión en varios archivos, puede hacerlo configurando múltiples controladores para múltiples registradores con nombre

#FileHandler for file1 java.util.logging.FileHandler.pattern = logging_property_test.log java.util.logging.FileHandler.limit = 50000 java.util.logging.FileHandler.count = 1 java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter #FileHandler for file2 logging.FileHandler2.pattern = logging_property_test2.log logging.FileHandler2.limit = 50000 FileHandler.count = 1 logging.FileHandler2.formatter = java.util.logging.SimpleFormatter #setting handler for logger1 logging.PropertyTestingLogger.handlers=java.util.logging.FileHandler #setting handler for logger2 logging.PropertyTestingLogger2.handlers=logging.FileHandler2

como puedes ver, el truco es que hay un logging.FileHandler2 que es una clase personalizada y no hace más que extender el FileHandler

package logging; import java.io.IOException; import java.util.logging.FileHandler; public class FileHandler2 extends FileHandler { public FileHandler2() throws IOException, SecurityException { super(); } }

Antecedentes : lamentablemente, los creadores de Java no esperaban que nadie iniciara sesión en varios archivos. Si mira el origen de java.util.logging.FileHandler, encontrará que la propiedad de patrón se carga con el nombre de clase:

public class FileHandler extends StreamHandler { private String pattern; private void configure() { String cname = getClass().getName(); pattern = manager.getStringProperty(cname + ".pattern", "%h/java%u.log");

Tengo una pregunta sobre la configuración de registro jdk. Tengo un EJB (implementado en glassfish) que usa JDK Logging para enviar mensajes. Por lo tanto, uso un registrador con nombre con un código como este:

private static Logger logger = Logger.getLogger("org.imixs.workflow"); ..... logger.fine(" some info..."); ....

Sé que puedo configurar el nivel de registro para mi registrador agregando la siguiente línea en el archivo logging.properties de Glassfish:

..... org.imixs.workflow.level=FINE

Pero, ¿cómo puedo especificar el archivo de salida para mi registrador? Me gustaría poner todos los mensajes del registrador llamado ''org.imixs.workflow'' en un archivo separado. es posible?

Gracias por cualquier ayuda


Con java.util.logging, NO ES POSIBLE simplemente modificando el archivo de configuración. Lamentablemente, debe extender FileHandler y configurar ese controlador para filtrar lo que desea registrar.


Deberías usar un FileHandler .

FileHandler fileHandler = new FileHandler("myLogFile"); logger.addHandler(fileHandler);

Vea Ejemplo de Depósito para algunos ejemplos claros que configuran registradores.

Y puede que encuentre útiles estas respuestas para establecer desde el archivo de propiedades.