2010-03-06 3 views
5

Non riesco a trovare una libreria che consenta di formattare le istruzioni di output del registro in un modo molto più gradevole di quello che si vede normalmente. Una delle funzionalità che ricordo è che potrebbe "compensare" il messaggio di log in base alla "nidificazione" di dove si trovava l'istruzione del log.Java: libreria con output di registro formattati in modo corretto

Cioè, invece di questo:

DEBUG | DefaultBeanDefinitionDocumentReader.java| 86 | Loading bean definitions 
DEBUG | AbstractAutowireCapableBeanFactory.java| 411 | Finished creating instance of bean 'MS-SQL' 
DEBUG | DefaultSingletonBeanRegistry.java| 213 | Creating shared instance of singleton bean 'MySQL' 
DEBUG | AutowireCapableBeanFactory.java| 383 | Creating instance of bean 'MySQL' 
DEBUG | AutowireCapableBeanFactory.java| 459 | Eagerly caching bean 'MySQL' to allow for resolving potential circular references 
DEBUG | AutowireCapableBeanFactory.java| 789 | Another debug message 

Sarebbe mostra qualcosa di simile:

DEBUG | DefaultBeanDefinitionDocumentReader.java| 86 | Loading bean definitions 
DEBUG | AbstractAutowireCapableBeanFactory.java | 411 | Finished creating instance of bean 'MS-SQL' 
DEBUG | DefaultSingletonBeanRegistry.java  | 213 | Creating shared instance of singleton bean 'MySQL' 
DEBUG | AutowireCapableBeanFactory.java   | 383 | Creating instance of bean 'MySQL' 
DEBUG | AutowireCapableBeanFactory.java   | 459 | |__ Eagerly caching bean 'MySQL' to allow for resolving potential circular references 
DEBUG | AutowireCapableBeanFactory.java   | 789 |  |__ Another debug message 

Questo è un esempio che ho appena fatto up (VeryLongCamelCaseClassNamesNotMine). Ma ricordo di aver visto un output del registro così pulito e che erano davvero molto più belli di qualsiasi cosa avessi visto prima e, oltre ad essere semplicemente più belli, erano anche più facili da leggere perché riproducevano parte dell'organizzazione logica del codice.

Eppure non riesco a trovare più cosa fosse quella libreria.

Sono abbastanza sicuro che fosse pienamente compatibile con log4j o sl4j.

+2

Hai guardato PatternLayout di log4j? Sembra che copre la formattazione desiderata http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html – marklai

+0

@marklai: +1 al tuo commento, è interessante in quanto a quanto pare può funzionare, ma sono davvero dopo una libreria/API che esiste (per Java) ma che semplicemente non riesco a trovare più e fa il "logging in base al livello dell'indent" thinggamagic. Sto provando snap.com in modalità visiva per trovare la pagina web del progetto ma semplicemente non riesco a trovarlo :( – SyntaxT3rr0r

+0

Non sono sicuro di quale sia la libreria, ma probabilmente dovresti fare attenzione a un risultato di prestazioni. Se, probabilmente sta usando lo stack per essere in grado di calcolare quanto profondo deve rientrare. Il problema è che per ottenere lo stack, deve generare un'eccezione, prenderlo e ottenere la traccia dello stack da lì. Questo è probabilmente il modo in cui log4j emette il nome del metodo richiamato e avvisa anche in caso di problemi di prestazioni gravi (http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/PatternLayout.html). –

risposta

1

vedo due cose nei vostri esempi di codice:

  1. imbottitura della classnames secondo il nome più lungo
  2. I messaggi modificati a seconda del "nesting".

Per 1. Ho quasi vedere come questo può essere fatto, dal momento che non si sa mai quale classe sarà log in futuro. Certo, puoi aggiungere padding in base al nome della classe più lungo che ha registrato, ma il file non sarà bello come il tuo campione una volta registrato un nome di classe più lungo.

Per 2. Si potrebbe implementare un filtro (vedere per la documentazione di logback sul filtro) che studierà i dati del chiamante e aggiungerà un qualche tipo di prefisso "è annidato in" come è stato scritto nel proprio esempio. Questo non sarebbe un compito troppo difficile, immagino.

Spero che questo aiuti ... anche se non si forniscono con il link al lib siete alla ricerca di ... :-(

+0

Non riesco a capire perché il registro contenga .java con i nomi delle classi ... non è come aiuta. –