2015-06-04 4 views
5

Ich arbeite an einem Projekt mit Legacy-Code, der Log4J in der Vergangenheit verwendet hat und jetzt SLF4J verwendet. Die meisten Log4J Logging-Anweisungen im alten Stil bleiben bestehen, und ich konvertiere die Log-Anweisungen langsam in den neuen SLF4J-Stil, wenn ich auf sie stoße.IntelliJ: Gibt es eine Intention Action, um alte Log4J-Aufrufe in neue SLF4J-Aufrufe umzuwandeln?

Ich habe gemerkt, dass das Drücken Alt + Eingabe, wenn in den alten Protokollanweisungen Stil mir die folgenden Optionen gibt (leider kann ich keinen Screenshot hochladen):

  • kopieren String Verkettung Text die Zwischenablage
  • Injekt Sprache oder Referenz
  • Ersetzen '+' mit 'String.format()'
  • Ersetzen '+' mit 'StringBuilder.append()'
  • Ersetzen '+' mit 'java.test.MessageFormat.format()'

Die Option Replace '+' with 'String.format()' sehr nahe ist, was ich brauche, obwohl ich das String.format( Bit nicht brauchen.

Gibt es etwas, das mir eine Absichtsaktion geben würde: Replace Log4J style log statement with SLF4J style log statement?

Als Beispiel für alte Logging-Stil (zB Log4J), ich meine:

LOGGER.debug("User " + user.getUserId() + " has performed a search with the criteria " + dto); 

Und durch neue Art meine ich:

LOGGER.debug("User {} has performed a search with the criteria {}", user.getUserId(), dto); 
+1

AFAIK gibt es nicht –

+1

Intellij hat strukturelle ersetzen, die Ihnen helfen können (aber ich habe es nicht genug verwendet, um Sie hier spezifisch helfen): https://www.jetbrains.com/idea/documentation/ssr. html –

+0

@WimDeblauwe Es hilft sicherlich! Vielen Dank. – vegemite4me

Antwort

7

Haben Sie versucht, die Java | Probleme bei der Protokollierung | Nicht-konstante String-Verkettung als Argument für Protokollierungsaufruf Inspektion? Es verfügt über einen Quickfix zum automatischen Konvertieren einer String-Verkettung in eine parametrisierte Log-Nachricht.

+0

Großartiger Vorschlag. Es ist jetzt eingeschaltet und es funktioniert sehr gut. – vegemite4me

+0

Dieser Vorschlag, eine _Inspection_ zu verwenden, liegt näher an _Intention Action_ als _Structural Replace_. Vielen Dank! – vegemite4me

3

Dank Wim Deblauwe Kommentar über SSR Ich habe entdeckt Bearbeiten | Finde | Struktur ersetzen und die folgende mit einfachen Fällen zu beheben, wo zwei Argumente in einer Logging-Anweisung verwendet werden:

Suche Vorlage:

LOGGER.debug("$str1$" + $arg1$ + "$str2$" + $arg2$) 

Ersatzvorlage:

LOGGER.debug("$str1${}$str2${}", $arg1$, $arg2$) 

Ich bezweifle ich benutze Die Funktion "Strukturelle Suche und Ersetzen" erreicht ihre maximale Leistungsfähigkeit und muss einige Sweeps ausführen, um alle Protokollierungsanweisungen zu erhalten. Dies ist jedoch ein großer Fortschritt. Danke, Wim.

Verwandte Themen