2009-08-06 17 views
5

Ho un'applicazione legacy PSVM che mi piacerebbe reindirizzare l'output di registrazione a file univoci per esecuzione. Quindi, se lo invoco alle 10:00, fallo reindirizzare l'output a {thread-id} -10: 00.log; e un altro thread di esecuzione può iniziare un'esecuzione alle 10:01 e il suo output andrebbe a {thread-id} -10: 01.log. Capisco che questo non è elegante.creazione e distruzione dinamiche degli allegati di registrazione

Le mie domande sono:

  • è possibile?
  • qualcuno ha un'idea di come avvicinarsi?
  • è possibile rilasciare/distruggere un appender quando non è più necessario?

Grazie!

risposta

4

Vorrei iniziare con FileAppender e derivare da quello per creare il proprio. È sufficiente modificare la versione per ottenere l'id corrente del thread e aggiungere un id thread/id adatto al file prima della creazione. Si manterrebbe (diciamo) una mappa di (buffered) FileWriters con chiave sull'id di thread.

Scrivere appendici è piuttosto banale - here's a Javaworld guide su come farlo.

In quanto sopra, è probabile che il programma si avvii due volte in un minuto? Vorresti aggiungere un ID di processo o simile per mantenere l'unicità?

+0

grazie per la risposta rapida! non è il caso per un thread di farlo più di una volta. Ma, in ogni caso, questo è solo un esempio a fini di discussione. il nome sarebbe ambito per l'unicità. Qualche idea su come rilasciare il file writer? –

+0

+1 Buon collegamento tutorial – WolfmanDragon

+0

Re. rilasciando. Penso che dovresti lavare lo scrittore dopo ogni messaggio di log (per assicurarti di scrivere su disco), e non preoccuparti di rilasciarlo. Lascia che la JVM abbassi tutto. A meno che tu non stia scrivendo molti thread e abbia molti file aperti. Quindi potresti semplicemente voler tenere aperti i "n" scrittori e chiuderne alcuni quando non sei loggato. Ciò potrebbe causare alcuni problemi, tuttavia :-) –

1

Non è possibile, almeno non è facile farlo in log4j. Tuttavia, se si guarda la spedizione SiftingAppender con il logback (successore di log4j), è progettato per gestire la creazione di appendici sui criteri di runtime e la loro rimozione quando non sono più necessari.

Se l'applicazione deve creare un solo file di registro per l'avvio dell'applicazione, è sufficiente denominare il file di registro in base a un timestamp. Urla sulla mailing list di logback-user se hai bisogno di ulteriore assistenza.

+0

Sono curioso di saperne di più sul perché questo non è possibile. Sembra essere relativamente semplice. Ho seguito un post per l'utente di logback. Spero che tu possa trovarlo lì ed elaborare. Grazie! –

+0

Dipende se si desidera configurare l'appender personalizzato a livello di programmazione o tramite un file di configurazione. C'è anche la questione di gestire i file di log (uno per thread) in un'applicazione multi-thread. La domanda originale non era molto specifica riguardo a questi due problemi. – Ceki

Problemi correlati