Groovy @Log Annotation Wake Calls innerhalb von Closures

8

BEARBEITEN : GROOVY-6932 wurde protokolliert und wurde nun geschlossen - Das Problem ist in Groovy v2.4.8 als behoben markiert.

Ich verwende die Annotation @ Slf4j, um meinen groovigen Klassen eine Protokollierung hinzuzufügen.

Ich mag es wegen der AST-Umwandlung, die meine Log-Aufrufe in einen "Enablement" -Check einbindet, dokumentiert hier

>

Was ich jedoch herausgefunden habe, ist, dass die Wächterklausel nicht funktioniert, wenn die Log-Methode innerhalb einer Closure aufgerufen wird.

Unter Groovy 2.2.0 protokolliert dieser Code nur eine Nachricht, druckt aber zweimal "angerufen".

%Vor%

Ich habe versucht, "this" -, "owner" - und "delegate" -Bezeichner zur log-Anweisung hinzuzufügen, aber das gleiche Ergebnis.

Der Kontext, in dem ich dies fand, war, als ich versuchte, einige Knoten mit XmlUtil.serialize zu loggen, während XML mit XmlSlurper analysiert wurde.

Ich arbeite an dem Problem, indem ich das NodeChild-Objekt in einem Lightweight-Objekt mit einer toString () -Methode umschließt, die die XmlUtil-Klasse aufruft. Das wird gut funktionieren und der Overhead der zusätzlichen Wrapper-Klassen ist es nicht wert, sich darüber Gedanken zu machen. Ich bin mehr daran interessiert, einen einfachen Weg um dieses Problem zu finden, so dass ich zurückgehen kann, um nicht über die Kosten der Erstellung von Logging-Nachrichten nachzudenken, wenn sie sowieso nicht protokolliert werden.

Die Frage, die ich stelle: Gibt es eine Möglichkeit, die Wächterklausel für die Protokollierungsstufe ordnungsgemäß in Schließungen arbeiten zu lassen, anstatt die "log.traceEnabled" -Aufrufe selbst hinzufügen zu müssen?

    
Shorn 26.06.2014, 03:02
quelle

1 Antwort

0

Nur ein kurzer Gedanke. Woher weißt du, was log.traceEnabled bei der Ausführung von Closure sein wird? Siehe das modifizierte Beispiel ...

%Vor%

Jetzt zum Zeitpunkt der Schließung ist log.traceEnabled falsch, aber wenn die Schließung ausgeführt wurde, hat sich dies geändert.

Die Ausgabe ist:

%Vor%

Beachten Sie, dass das zweite TRACE immer noch nicht gedruckt wird: -)

    
Hristo Trendafilov 07.07.2015 13:59
quelle

Tags und Links