Libreria pre-confezionata? Probabilmente no. Ce ne sono alcuni - ma non sembra avere le dimensioni di dove siamo interessati - STAT e un video YouTube su di esso. Interessante, ma progettato per sistemi che sono una scala completamente diversa dalla maggior parte delle persone su cui lavorare.
Nelle ricerche precedenti per soluzioni simili, alla fine ho finito per scrivere il mio software di tracciamento delle impronte digitali.
Hai una traccia dello stack dal sistema e l'hai bloccata dove. Sembra approssimativamente come:
com.foo.bar.UserNotFoundException: User not found
at com.foo.bar.ErrorHandler.handle(errorHandler.lang:42)
at com.foo.bar.StuffDoer.doStuffA(StuffDoer.lang:314)
at com.foo.bar.StuffDoer.doStuffB(StuffDoer.lang:271)
at com.not.yours.base.Base(Base.lang:2357)
Questo è il formato generale di una traccia dello stack - ha il gestore delle eccezioni in alto (che non è troppo utile) e la base del sistema in basso (che non è altrettanto utile).
Come programmatore di applicazioni, quello che vuoi veramente è la roba nel mezzo. Questo può essere un metodo o una dozzina, ma è ciò che effettivamente identifica questa traccia dello stack rispetto ad altri. Le specifiche delle cose al di fuori della tua chiamata non sono sempre così utili.
Come programmatore di sistemi, la roba in basso è probabilmente la più interessante.
Il primo passo è analizzare la traccia di stack linea per linea identificando le informazioni rilevanti e identificando ulteriormente se il frame dato è di interesse - se tutto passa attraverso ErrorHandler.handle () prima che lo stack venga riportato, quella cornice non è utile per identificare o raggruppare lo stack.
Successivamente, ho serializzato la matrice delle informazioni interessanti (nome del metodo, nome della classe - numero di riga nel caso in cui ho avuto a che fare in passato era troppo variabile tra le versioni che non era utile, ma potrebbe essere per te) e memorizzato l'hashcode di quello in un database. A causa dei diversi sistemi e linguaggi che lavorano sull'applicazione per identificare una traccia dello stack, questo era un semplice join di testo e md5sum (se dovessi farlo di nuovo, sarei tentato di farlo in codice JSON e hash).
Nel database, il codice hash della parte interessante della traccia dello stack poteva quindi essere calcolato rapidamente ed era di dimensioni fisse (bello per indici di database e / o chiavi - sebbene non fosse male nemmeno per le directory).
Le tracce dello stack più lunghe di una certa dimensione minima sono state esaminate più volte. Ad esempio, se la dimensione minima per un ulteriore esame era 3 e la traccia dello stack era "a b c d e", le seguenti tracce dello stack verrebbero memorizzate:
- a b c d e
- a b c d
- b c d e
- a b c
- b c d
- c d e
Sì, a volte tutto era un sottoinsieme di un'altra serie di analisi, ma lasciava che la gente guardasse parti più piccole e identificasse i modelli di comportamento scorretto.