2009-08-06 7 views
5

Tengo una aplicación PSVM heredada que me gustaría redirigir su salida de registro a archivos únicos por ejecución. Entonces, si lo invoco a las 10:00, luego lo redirecciono a {thread-id} -10: 00.log; y otro hilo de ejecución puede comenzar una ejecución a las 10:01, y su salida iría a {thread-id} -10: 01.log. Entiendo que esto no es elegante.creando y destruyendo dinámicamente agregados de registro

Mis preguntas son:

  • es esto posible?
  • ¿alguien tiene una idea de cómo acercarse?
  • ¿es posible liberar/destruir un appender cuando ya no se necesita?

Gracias!

Respuesta

4

Comenzaría con FileAppender y derivaría de eso para crear el suyo propio. Simplemente modifique su versión para obtener el ID del tema actual y añadir un hilo-id/marca de tiempo adecuado para el archivo antes de la creación. Usted mantendría (dirá) un mapa de (amortiguado) FileWriters codificado en el id. Del hilo.

Escribir appenders es bastante trivial - here's a Javaworld guide sobre cómo hacerlo.

En lo anterior, ¿es probable que su programa se inicie dos veces en un minuto? ¿Le gustaría agregar una identificación de proceso o similar para mantener la singularidad?

+0

gracias por la respuesta rápida! no es el caso para un hilo hacerlo más de una vez. Pero, en cualquier caso, esto es solo un ejemplo para el debate. el nombre tendría un alcance por singularidad. ¿Alguna idea sobre cómo liberar el escritor de archivos? –

+0

+1 Buen enlace de tutorial – WolfmanDragon

+0

Re. liberando Creo que debe enjuagar el escritor después de cada mensaje de registro (para garantizar la escritura en el disco), y no se preocupe por liberarlo. Deje que la JVM quite todo. A menos que esté escribiendo muchos hilos y tenga muchos archivos abiertos. Entonces quizás solo quiera mantener abiertos los 'escritores' a la vez y cerrar algunos cuando no esté conectado. Sin embargo, esto puede dar como resultado algunos problemas :-) –

1

No es posible, al menos no es fácil de hacer en log4j. Sin embargo, si mira el envío SiftingAppender con logback (sucesor de log4j), está diseñado para manejar la creación de appendios en los criterios de tiempo de ejecución, así como su eliminación cuando ya no sea necesario.

Si su aplicación necesita crear solo un archivo de registro por cada inicio de aplicación, puede simplemente asignarle un nombre a su archivo de registro basado en una marca de tiempo. Grite en la lista de correo de usuario de logback si necesita más ayuda.

+0

Tengo curiosidad por obtener más antecedentes sobre por qué esto no es posible. Parece ser relativamente sencillo. Seguí con una publicación para logback-user. Espero que puedas encontrarlo allí y elaborarlo. ¡Gracias! –

+0

Depende de si desea configurar el appender personalizado mediante programación o mediante un archivo de configuración. También está la cuestión de gestionar los archivos de registro (uno por hilo) en una aplicación multiproceso. La pregunta original no era muy específica con respecto a esos dos temas. – Ceki

Cuestiones relacionadas