Eclipse - Sonar S2629 möglich falsch positiv mit neuem String

user7294900:

Ich bin mit neuesten Eclipse und Sonar-Plugin

In Antwort für die Anmeldung gibt es die folgende Zeile:

log.debug("Request body: {}", new String(body, "UTF-8"));

Welches String sollte nur, wenn in DEBUG Ebene erstellen:

/**
 * Log a message at the DEBUG level according to the specified format
 * and argument.
 * <p/>
 * <p>This form avoids superfluous object creation when the logger
 * is disabled for the DEBUG level. </p>
 *
 * @param format the format string
 * @param arg    the argument
 */
public void debug(String format, Object arg);

Aber Sonar markiert es als squid:S2629:

„Voraussetzungen“ und Protokollierung Argumente sollten nicht Auswertung erfordern (Tintenfisch: S2629)

Und geben Sie Beispiele mit Verkettung

logger.log (Level.DEBUG "ging etwas schief:" + message); // Nicht kompatibel; String-Verkettung durchgeführt, auch wenn Protokollebene zu hoch DEBUG Meldungen zu zeigen

Ist es ein falsch positives Sonar Warnung oder bin ich etwas fehlt?

Dies ist kein Duplikat dieser Frage , die im Allgemeinen über das Regel - Konzept verlangt, die Verkettung ist, aber nicht die Formatierung mit dem Objekt zu schaffen alsnew String

Auch Verknüpfung einer Antwort sagt zu schaffen new Date()ist nicht ein Problem zu schaffen mit im Format aufgebaut:

public static void main(String[] args) {
    LOGGER.info("The program started at {}", new Date());
}

}

Protokollieren diese Weise vermeiden Sie Performance-Overhead für Strings Verkettung wenn nichts sollte eigentlich eingeloggt sein.

howlger:

In nicht-DEBUG-Modus der Leitung

log.debug("Request body: {}", new String(body, "UTF-8"));

Anstatt von

log.debug(MessageFormatter.format("Request body: {}", new String(body, "UTF-8")));

vermeidet die Erzeugung der Zeichenfolge , die über erstellt wird MessageFormatter.format(String messagePattern, Object arg), aber nicht die Schaffung der anderen Zeichenfolge, die erstellt wird new String(body, "UTF-8").

Dies bedeutet , es ist nicht falsch positiv , weil die Argumente zuerst berechnet werden , bevor die Protokollierung - Methode aufgerufen wird.

Solange SLF4J nicht Lambda - Ausdruck unterstützt zu faul Argumente zu bewerten (siehe Kommentar von ZhekaKozlov ) kann die folgende Dienstprogramm Methode als Behelfslösung verwendet werden:

private static Object lazyToString(final Supplier<String> stringSupplier) {
    return new Object() {
        @Override
        public String toString() {
            return stringSupplier.get();
        }
    };
}

Dies kann das Umwandeln des Byte-Arrays in einen String in den DEBUG-Modus zu beschränken, nur dann verwendet werden:

log.debug("Request body: {}", lazyToString(() -> new String(body, StandardCharsets.UTF_8)));

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Sonar falsch positiv bei Regel: Nullzeiger sollten nicht dereferenziert werden

Falsch positiv mit Regel S2538 in verschachtelter While-Switch-Switch-Konstruktion

Falsch positiv mit SonarQube pl/sql-Regel plsql:S3633

(PHP) strtotime-Funktion falsch positiv mit char

Sonar Cube "Null-Zeiger-Ausnahme könnte ausgelöst werden": Falsch positiv?

Servlets sollten keine veränderbaren Instanzfelder haben, die mit Spring Autowire falsch positiv sind (Tintenfisch: S2226).

SonarLint - RedundantThrowsDeclarationCheck - falsch positiv?

Sonarqube + Lombok = falsch positiv

Als falsch positiv markieren

Falsch positiv im SonarQube-Tintenfisch: S2583

Sonar falsch positiv, "Ändern Sie den Zustand so, dass er nicht immer als wahr ausgewertet wird."

Git Conflict - Falsch positiv anzeigen

Autotools, stdc ++ fs, falsch positiv

Checker Framework argument.type.inkompatibel falsch positiv mit commons-lang3

C ++ 11 (g ++ Thread bereinigt) Ordnen nichtatomarer Operationen mit Atomics (falsch positiv?)

Verwendung von .apply () mit 'neuem' Operator. Ist das möglich?

Java: Schnittstelle mit neuem Schlüsselwort wie ist das möglich?

Gibt es eine Möglichkeit, Verstöße in großen Mengen als "falsch positiv" zu markieren?

Mögliche FindBugs falsch positiv von UL_UNRELEASED_LOCK_EXCEPTION_PATH?

cppcheck "Mögliche Nullzeiger-Dereferenzierung". Falsch positiv oder ein Fehler?

Mit OjAlgo kann kein verallgemeinertes Eigenwertproblem mit positiv definitiven symmetrischen Matrizen durchgeführt werden - Was mache ich falsch?

Falsch positiv für Eslint-Parser

Clang Analyzer potenzieller Speicherverlust - falsch positiv

Pylint-Duplikat-Code falsch positiv

mod_security Regel 981203 falsch positiv

C # App erscheint in AVG Antivirus falsch positiv?

KVO - UIScrollView.contentSize falsch positiv?

Sonarqube 5 - Wie markiere ich falsch positiv?

falsch positiv bei der Validierung von Requisitentypen

TOP Liste

  1. 1

    So verschieben Sie ein Bild in Flutter/Dart mit einem Draggable

  2. 2

    Unity Build-Fehler: Der Name 'EditorUtility' ist im aktuellen Kontext nicht vorhanden

  3. 3

    TypeAhead.js zeigt keine Ausgangsschienen an?

  4. 4

    Deklarieren einer nicht initialisierten Variablen in der Klassendefinition in Python

  5. 5

    Wie kann ich eine verschachtelte Schleife mit lapply in R ersetzen?

  6. 6

    Interpolieren Sie mit Python die 2D-Matrix entlang der Spalten

  7. 7

    spring-data-jpa: ORA-01795: Die maximale Anzahl von Ausdrücken in einer Liste beträgt 1000

  8. 8

    Warum funktioniert Phantomjs nicht mit dieser Site?

  9. 9

    numpy: Berechnen Sie die Ableitung der Softmax-Funktion

  10. 10

    Wie vermeide ich, dass die gesamte App neu geladen wird, wenn Nav.Link von React-Bootstrap verwendet wird?

  11. 11

    MongoDB eingebettetes Dokument unterscheiden und filtern

  12. 12

    Warum funktioniert das Umgebungslicht in diesem Beispiel nicht?

  13. 13

    Wie aktualisiere ich ein Feld in einer Raumdatenbank mit einem Repository und einem Ansichtsmodell?

  14. 14

    Python gibt einen Fehler aus, dass eine Datei nicht vorhanden ist, wenn dies eindeutig der Fall ist

  15. 15

    Aktualisieren des Werts im Json-Objekt in Python

  16. 16

    Wie verwende ich Format-Table ohne Abschneiden von Werten?

  17. 17

    Kivy: Machen Sie Scatter gleich groß wie das untergeordnete Etikett oder Bild

  18. 18

    So berechnen Sie die Verfügbarkeit von Anwendungen (SLA)

  19. 19

    So vergleichen Sie Werte in verschiedenen Objekten jq

  20. 20

    Teilen Sie die Zeichenfolge durch (') und Leerzeichen, aber lassen Sie alle Leerzeichen zwischen zwei aufeinander folgenden (')

  21. 21

    Überprüfen Sie, ob der ausgewählte Wert 'YES' ist, wenn ja, aktivieren Sie ein Steuerelement mit Javascript

heißlabel

Archiv