
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 awk
der 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 less
im Raw-Modus beispielsweise Folgendes verwenden:
colorize mylog.txt | less -R
Antwort2
awk
ist, 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 Lambertslogtool
ist 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:
log-color-highlight
colout
ccze
- István Karaszis
colorize
- Radovan Garabíks
grc
- Protokollbeobachter
- verstopfen
- Joakim Anderssons
colortail
- Regenbogen
- navi
Probleme mit der Kolorierung
Leider machen einige dieser Tools die Farbgebung sehr falsch. Sie verdrahten Steuersequenzen fest, anstatt setaf
/ setab
usw. 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 grep
hat 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 awk
in 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.