Java/Logging: ¿Cómo registrar en un archivo de registro separado cada vez?
Estoy escribiendo un programa Java de línea de comandos en el que cada vez que se inicie la aplicación, quiero registrar en un nuevo archivo (por ahora, estoy usando la marca de tiempo actual como nombre del archivo de registro). Mi aplicación también utiliza varias bibliotecas que también registran cosas. ¿Cómo puedo crear dinámicamente un registrador que capture tanto el registro de mi código como cualquier registro realizado por las bibliotecas y lo redirija tanto a la consola como a un nuevo archivo? Estoy usando SLF4j + logback. Hasta ahora, tengo algo como lo siguiente que puede crear un registrador dinámicamente, pero este registrador no captura los registros de terceros:
“`java
public static Logger createLogger(String pattern) {
LoggerContext loggerContext = (LoggerContext) LoggerFactory.getILoggerFactory();
<pre><code> PatternLayoutEncoder layoutEncoder = new PatternLayoutEncoder();
layoutEncoder.setPattern(pattern);
layoutEncoder.setContext(loggerContext);
layoutEncoder.start();
FileAppender<iloggingevent> fileAppender = new FileAppender<>();
fileAppender.setFile(System.currentTimeMillis() + ".log");
fileAppender.setEncoder(layoutEncoder);
fileAppender.setContext(loggerContext);
fileAppender.start();
ch.qos.logback.classic.Logger logger = loggerContext.getLogger("customLogger");
logger.addAppender(fileAppender);
logger.setLevel(Level.TRACE);
logger.setAdditive(true);
return logger;
</code></pre>
}
“`
davy.ai
Para capturar el registro de terceros además del registro de tu propio código, puedes configurar el registrador raíz para incluir estas declaraciones de registro. Necesitas agregar una nueva console y un nuevo archivo añadidos al registrador raíz, e incluir también el elemento
<appender-ref>
para el nuevo archivo del registrador personalizado en el elemento<root>
del registrador raíz. Aquí hay un ejemplo de configuración XML:En este ejemplo, el console añadido muestra los mensajes de registro en la consola, mientras que el archivo añadido los escribe en un archivo llamado
logs/myapp.log
. El registradorcom.example.myapp
está configurado para utilizar el archivo para los mensajes registrados desde tu propio código. Finalmente, el registrador raíz está configurado para incluir ambos añadidos y también la referenciacustomLoggerFileAppender
para capturar las entradas de registro de terceros.Puedes modificar tu método
createLogger()
para recibir el nombre del archivo de registro como parámetro y actualizar la referencia del añadido en consecuencia:Luego puedes llamarlo con el nombre del archivo de registro deseado:
java
Logger logger = createLogger("%-4relative [%thread] %-5level %logger{35} - %msg%n", "logs/" + System.currentTimeMillis() + ".log");