Buona libreria per combinare tracce .net stack [chiuso]

-1

Attualmente sto segnalando le mie eccezioni di produzione in un database mysql, dove hanno raccolto polvere per la maggior parte. Il problema che ho affrontato è il raggruppamento delle tracce dello stack. Mi piacerebbe essere in grado di vedere una sorta di aggregato delle tracce dello stack uguali, in modo che io possa lavorarle nel flusso di lavoro.

So che un problema che ho è che ottengo tracce di stack in lingue diverse, che buttano via le cose, altrimenti farei semplicemente un comando di gruppo con sql.

Qualcuno sa di qualche biblioteca che potrebbe aiutarmi con questo? Finché ho qualcosa in cui posso mettere una collezione di tracce di stack e ottenere il risultato, sto bene. Non ho bisogno di alcuna interazione diretta con SQL, o di rapporti o qualcosa del genere (ma prenderò qualsiasi suggerimento che voi abbiate)

Grazie

    
posta Kelly Elton 12.02.2013 - 00:52
fonte

1 risposta

2

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.

    
risposta data 12.02.2013 - 03:02
fonte

Leggi altre domande sui tag