2010-07-01 2 views
6

Ich bin derzeit die Quelle von einigen verzögertes Laden Anrufe in Hibernate auf die Spur zu versuchen, und der einfachste Weg, dies zu tun wäre, die SQL-Protokollierung aktivieren wintern, wenn der träges Laden einen Stack-Trace auftreten wird und dann auslösen ideal Ausgabe immer wenn der Logger benutzt wird. Im Moment benutze ich Hibernate 3.5.2, das SLF4j verwendet und Log4j als meine Protokollierungsimplementierung verwendet.Gibt es eine Möglichkeit, einen Stacktrace auszulösen, wenn ein bestimmter Logger verwendet wird?

Ich könnte AOP verwenden, um jeden Logging-Aufruf zu umgeben und zu überprüfen, ob es ein Aufruf an den SQL-Logger ist, aber das scheint irgendwie schwerhändig und ich wollte wissen, ob es einen einfacheren Ansatz gab, den ich vor mir vermisste ging diese Straße hinunter.

Antwort

5

Sie können eine der log4j Appender erweitern und dass dann in Ihrem log4j.xml verwenden.

public class StackPrintingFileAppender extends FileAppender { 
    protected void subAppend(LoggingEvent event) { 
     new Exception().printStackTrace(new PrintWriter(qw)); 
     super.subAppend(); 
    } 
} 

und dann in log4j.xml:

<appender name="logger" class="StackPrintingFileAppender"> 
    ... 
</appender> 
+0

Danke, das ist genau die Art von Sache, die ich will. es eigentlich nicht tun, was ich (nur Druck Stack-Traces für die Kategorie wollte ich will, aber ich kann die Logging zu testen, ob seine diejenige, die ich Stack-Traces drucken möchten für leicht untersuchen. – Jherico

+0

Narrow es nach unten, so dass die appender nur aktiv für das, was Sie sehen möchten. –

0

Sie könnten Ihre eigene SLF4J Brücke schreiben und sich stattdessen in den Classpath setzen der Log4j ein. Sie könnten dann an Log4j delegieren, aber die Aufrufe so abfangen, wie Sie es für richtig halten, ohne AOP. Es scheint einfacher zu instrumentieren und leidet nicht an zusätzlichen Herausforderungen, die über das AOP hinausgehen, wenn es darum geht, den richtigen Logger herauszufinden und wann ein Lazy Loading stattfindet.

Verwandte Themen