2016-06-20 36 views
11

Esiste una soluzione di registrazione con funzionalità di raggruppamento delle eccezioni? Quello che voglio ottenere è quando si registra qualche eccezione, ad esempio 100 volte in 10 secondi, non voglio registrare 100 tracce dello stack. Voglio registrare qualcosa come RuntimeException was thrown 100 times: single stack trace here. Sarebbe perfetto avere qualcosa di integrato con log4j.Java: raggruppamento di eccezioni identiche nei registri

Ofc c'è un'opzione per creare qualche facciata di logging con coda di eccezione all'interno ma forse c'è qualcosa già implementato.

+1

Solo un pensiero: come gestiresti l'interlacciamento dei log indotto dai diversi thread? per esempio. se un thread registra X un gran numero di volte e un altro thread registra Y un gran numero di volte, si può finire con XYXYXYX Y. Ho dovuto fare qualcosa di simile su un progetto precedente e il framework di registrazione di terze parti non era la soluzione (abbiamo implementato il nostro meccanismo di raggruppamento ...) – xav

+0

@xav yes, ofc ci saranno alcuni problemi di concorrenza. Nel mio caso, la soluzione potrebbe essere metodi di registrazione sincronizzati/raccolte di concorrenza per lo stato di archiviazione con eccezione sequenziata o smth simile. Quindi X Y X Y X Y -> Xx3 Yx3. Potresti dirci un po 'di più su come è stato implementato il tuo meccanismo di raggruppamento? – coolguy

+0

Non ho parlato di questo tipo di concorrenza. Avere due thread logging allo * stesso tempo * andrà bene per log4j. L'uso di 'synchronized' nel tuo codice non aiuta affatto per il problema di cui ho parlato. Ho parlato di questo tipo di casi: un thread TX registra X, quindi due secondi dopo, un altro thread TY registra Y, quindi due secondi dopo, il thread TX registra X, quindi due secondi dopo, il thread TY registra Y, .... Come un risultato, il tuo file di log conterrà XYXYX Y ... (eccetto se hai un file di log per thread, che sarebbe strano) – xav

risposta

1

Si prega di dare un'occhiata a questo log handler implementation that groups logs per poi inviare a un indirizzo email.

La soluzione è fondamentalmente un log handler che utilizza uno CyclicBuffer per salvare i registri in memoria. Quando viene raggiunta una soglia o il sistema viene chiuso, il gestore svuota il buffer.

La soluzione è basata JUL (java.util.logging), ma può servire come base per la creazione della propria soluzione log4j con alcune modifiche. Ha funzionato bene per me. Spero che sia d'aiuto.

Problemi correlati