Probleme mit der Kolorierung

Probleme mit der Kolorierung

Ich möchte die Art und Weise ändern, wie ich eine große (~6000 Zeilen) Protokolldatei mit WIM, Less oder was auch immer anzeige, um die Problemprüfung zu vereinfachen.

Ich möchte einige Zeilen des Protokolls basierend auf einem Muster hervorheben (z. B. error, warning, info...), und/oder andere ausblenden.

Welche Tools könnte ich verwenden? Benötige ich nur ein Shell-Skript? Wichtig ist, dass ich nach dem Vorgang die Ausgabe mit less, vim, ... lesen kann, um Suchvorgänge durchzuführen!

Edit: ein kleiner Ausschnitt aus dem Log:

2016/10/25 12:19:24.403355 INFO <ServiceManager.cpp#2614 TID#3> Security object has NOT been parsed
2016/10/25 12:19:24.403369 INFO <ServiceManager.cpp#1263 TID#3> Service object sequence started
2016/10/25 12:19:24.403372 DBG <ServiceManager.cpp#1276 TID#3> preinvoke succeeded

Antwort1

Ich würde ein Shell-Skript empfehlen, das auf awkder Lösung von Valentin B. basiert:

$ cat colorize
awk '
function color(c,s) {
        printf("\033[%dm%s\033[0m\n",30+c,s)
}
/error/ {color(1,$0);next}
/success/ {color(2,$0);next}
/warning/ {color(3,$0);next}
/INFO/ {color(4,$0);next}
/DBG/ {color(5,$0);next}
{print}
' $1

Um die kolorierte Ausgabe interaktiv betrachten zu können, würde ich lessim Raw-Modus beispielsweise Folgendes verwenden:

colorize mylog.txt | less -R

Antwort2

awkist, wie bereits in anderen Antworten erwähnt, definitiv das Werkzeug, nach dem Sie zuerst greifen sollten.

Aber es ist bei weitem nicht das einzige Werkzeug.

AL Lambertslogtoolist speziell für die Nachbearbeitung von Protokolldateien konzipiert und verfügt über ein komplexes (und leider schlecht dokumentiertes) Konfigurationssystem, das es ermöglicht, jeder der 13 Farben eine Datei voller regulärer Ausdrücke zuzuweisen.

cat *.log | Logtool

Es zeichnet sich dadurch aus, dass es Protokolle mit TAI64N-Zeitstempeln versteht.

Fügen Sie hinzu:

Probleme mit der Kolorierung

Leider machen einige dieser Tools die Farbgebung sehr falsch. Sie verdrahten Steuersequenzen fest, anstatt setaf/ setabusw. von terminfo zu verwenden.

Beachten Sie auch, dass die Kolorierung aus subtileren Gründen schwierig ist und fast kein Kolorierungsprogramm sie richtig hinbekommt. Um sie vollständig richtig hinzubekommen, muss ein Kolorierer mit automatischen Rändern und dem DEC VT umgehen.ausstehender ZeilenumbruchMechanismus, den ich bisher bei keinem Colorizer gesehen habe. GNU grephat in diesem Bereich einen ziemlich bekannten Colorization-Bug, aber das ist kein Problem, das auf beschränkt ist grep.

Weiterführende Literatur

Antwort3

Nach der Überprüfung kannst du dir farbigen Text direkt im Terminal ausgeben lassen, indem du awk. Mit dem von dir angegebenen Beispiel kannst du eine awk-Skriptdatei (z. B. displayLog.awk) erstellen, die den folgenden Code enthält:

# output INFO lines in cyan
$3 == "INFO" {
    print "\033[36m"$0"\033[0m"
    next
}

# don't display DBG lines
$3 == "DBG" {
    next
}

# output WARNING lines in bright yellow
$3 == "WARNING" {
    print "\033[1;33m"$0"\033[0m"
    next
}

# output ERROR lines in bright red
$3 == "ERROR" {
    print "\033[1;31m"$0"\033[0m"
    next
}

# If you want to skip all other lines, comment next line
{print}

Öffnen Sie dann ein leeres Terminalfenster, prüfen Sie, ob die Anzeige unbegrenzt ist (Sie können alle 6000 Zeilen auf einmal anzeigen) und verwenden Sie es folgendermaßen:

$ awk -f displayLog.awk log.txt

ODERGefällt mir BenutzerAbonnierenin seiner Lösung vorgeschlagen, leiten Sie es in den Raw-Modus weiter less:

$ awk -f displayLog.awk log.txt | less -R

Das sollte funktionieren! Sie können mit den Farben experimentieren und anhand des Beispielcodes awkin meiner Antwort festlegen, welche Zeilen angezeigt werden sollen. Weitere Informationen zur FarbcodierungHier.

BEARBEITEN

Wenn Sie statt einer ganzen Zeile nur ein einzelnes Wort einfärben möchten (wenn Sie beispielsweise möchten, dass ERROR nur rot ist), gehen Sie wie folgt vor:

$3 == "ERROR" {
    $3 = "\033[1;31m"$3"\033[0m"
    print
    next
}

Antwort4

Wenn Sie bestimmte Zeilen des Protokolls anhand eines Musters (z. B. Fehler, Warnung, Info usw.) hervorheben möchten, verwenden Sie bitte den folgenden Befehl:

grep -rn "pattern" <logfile>

Dieser Befehl zeigt alle vollständigen Zeilen der Protokolldatei an, die dem oben genannten Muster entsprechen.

verwandte Informationen