Ich möchte in der Lage sein, die Ausgabe einer Server-Protokolldatei mit Nachrichten wie den folgenden zu beenden:
INFO
SEVERE
etc, und wenn es so ist SEVERE
, zeige die Linie in rot; Wenn ja INFO
, in grün. Welche Art von Alias kann ich für einen tail
Befehl einrichten, der mir dabei helfen würde?
command-line
colors
alias
highlighting
tail
Amir Afghani
quelle
quelle
sed
: stackoverflow.com/a/14691971/52074Antworten:
Probieren Sie Multitail aus . Dies ist eine Übergeneralisierung von
tail -f
. Sie können mehrere Dateien in separaten Fenstern anzeigen, Zeilen anhand ihres Inhalts hervorheben und vieles mehr.Die Farben sind konfigurierbar. Wenn das Standardfarbschema für Sie nicht funktioniert, schreiben Sie Ihr eigenes in die Konfigurationsdatei. Rufen Sie zum Beispiel
multitail -cS amir_log /path/to/log
mit folgendem Befehl an~/.multitailrc
:Eine andere Lösung, wenn Sie sich auf einem Server befinden, auf dem es unpraktisch ist, nicht standardmäßige Tools zu installieren , besteht darin, sie
tail -f
mit sed oder awk zu kombinieren , um Farbauswahl-Steuerungssequenzen hinzuzufügen. Dazu musstail -f
die Standardausgabe unverzüglich gelöscht werden, auch wenn es sich bei der Standardausgabe um eine Pipe handelt. Ich weiß nicht, ob dies bei allen Implementierungen der Fall ist.oder mit sed
Wenn Ihr sed nicht GNU sed ist, ersetzen Sie es
\o033
durch ein Escape-Zeichen und entfernen Sie es--unbuffered
.Eine weitere Möglichkeit besteht darin,
tail -f
in einem Emacs- Shell-Puffer zu arbeiten und die Syntax-Färbemöglichkeiten von Emacs zu verwenden.quelle
sed
? (Entschuldigen Sie, dass Sie faul sind und es nicht selbst herausgefunden haben!) Aber würden Sie bitte auch einsed
Beispiel hinzufügen .tail -f
with-awk
Code eine Zeichenfolge nicht über INFO und SEVERE verfügt , wird die Zeichenfolge nicht gedruckt. Wie kann ich die verbleibenden Zeichenfolgen drucken ? (Die Zeichenfolge muss nicht gefärbt sein); next
Vor den schließenden Klammern hinzufügen , um die weitere Verarbeitung zu überspringen, und1 {print}
am Ende eine neue Verarbeitungslinie (1
bedeutet immer).sed --unbuffered -e 's/\(.*FATAL.*\)/\o033[1;31m\1\o033[0;39m/' -e 's/\(.*ERROR.*\)/\o033[31m\1\o033[39m/' -e 's/\(.*WARN.*\)/\o033[33m\1\o033[39m/' -e 's/\(.*INFO.*\)/\o033[32m\1\o033[39m/' -e 's/\(.*DEBUG.*\)/\o033[34m\1\o033[39m/' -e 's/\(.*TRACE.*\)/\o033[30m\1\o033[39m/' -e 's/\(.*[Ee]xception.*\)/\o033[1;39m\1\o033[0;39m/'
grc , der generische colorizer ist ziemlich cool.
Mach einfach
und genieße!
Sie finden es auch auf GitHub .
quelle
Haben Sie sich ccze angesehen ? Sie haben die Möglichkeit, die Standardfarben einiger Schlüsselwörter mithilfe der Option
-c
oder direkt in Ihrer Konfigurationsdatei anzupassen . Wenn sich Ihr Bildschirm nach dem Einfärben aufhellt, müssen Sie die Option verwenden-A
.Bearbeiten:
Wenn Sie wirklich möchten, dass die gesamte Linie rot angezeigt wird, können Sie auch Folgendes ausprobieren:
\e[1;31m
gibt dir die rote Farbe. Wenn Sie etwas Gelb möchten, verwenden Sie\e[1;33m
und für Grüngebrauch\e[1;32m
. Das\e[0m
stellt die normale Textfarbe wieder her.quelle
\007
an das Ende der Regex, etwa so:perl -pe 's/(ERROR)/\033[31m$1\033[0m\007/g;'
. Dies funktioniert hervorragendset -g bell-action any
, wenn Sie tmux mit verwenden . In diesem Fall wird der Name des Fensters benachrichtigt, wenn der Regex eine Übereinstimmung findet, wenn Sie Ihr Protokoll in einem anderen Fenster verfolgen .Schauen Sie sich lnav an , den erweiterten Viewer für Protokolldateien.
Es kann auch verschiedene Formate drucken.
Vor:
Nach:
quelle
Sie können rainbow verwenden , das Linien basierend auf regulären Ausdrücken koloriert:
Es wird auch mit vordefinierten Konfigurationen geliefert , zum Beispiel für Tomcat-Protokolle:
(Haftungsausschluss: Ich bin der Autor)
quelle
rainbow
ist großartig. Bist du der Autor? Wenn ja, bearbeiten Sie bitte Ihre Antwort mit dieser Zuschreibung.Sie können Colortail verwenden :
quelle
apt install colortail
und es sollte funktionieren, ohne ~ / .colortail / zu bearbeiten.Beachten Sie auch, dass GNU grep with funktioniert , wenn Sie nur nach einem passenden regulären Ausdruck suchen möchten
--color
- leiten Sie einfach Ihretail
Ausgabe durch diesen.quelle
grep -A9999 -B9999
regex
, werden alle Zeilen angezeigt, es sei denn, Sie haben 10.000 nicht übereinstimmende Zeilen in einer Reihe. Verwenden Sie so etwas wieGREP_COLORS="ms=31:sl=33:cx=32" grep -A9999 -B9999 SEVERE
, um das WortSEVERE
in Rot, die restlichen SEVERE-Zeilen in Gelb und alle anderen (nicht SEVERE-) Zeilen (bis zu 9999) in Grün anzuzeigen.--color=always
statt nur grep übergeben--color
, aber ja, dies funktioniert mit Tail (GNU Coreutils) 8.27, das auf meiner Box installiert ist.Um eine farbige Ausgabe von Standardbefehlen wie zu erhalten
grep
, sollten Sie diesalias
in Ihrem einstellen.bashrc
Wenn Sie in Ihrer Datei nach etwas suchen, sehen Sie etwas in der Art (aber wahrscheinlich in rot):
Wenn Sie
tail
oder verwendenawk
möchten und möchten, dass die Farbe in einer Pipe erhalten bleibt, reicht der Alias nicht aus, und Sie sollten den--color=always
Parameter verwenden, zum Beispiel:Wenn Sie farbigen Text mit
awk
der Geschichte wollen, ist dieser etwas komplexer, aber leistungsfähiger, zum Beispiel:mit jeder Linie in ihrer eigenen Farbe.
Es gibt viele andere Möglichkeiten, kolorierten Text mit anderen Werkzeugen aus der Shell zu holen, und sie werden von anderen Mitgliedern gut beschrieben.
quelle
Ich mag Colorex sehr . Einfach und doch befriedigend.
quelle
Basierend auf der Antwort von @uloBasEI habe ich versucht zu verwenden
... | perl ... | perl ...
, aber die Linux-Pipe wird ein bisschen verrückt und ist zu langsam. Wenn ich alle Regeln in nur einemperl
Befehl setze , funktioniert es gut.Erstellen Sie zum Beispiel eine
perl
Datei colorTail.pl wie folgt :Verwenden Sie es als:
HINWEIS: Sie können es auch auf MobaXTerm verwenden ! Laden Sie das
perl
Plug-in einfach von der MobaXTerm- Website herunter .quelle
quelle
source-highlight
ist kein weit verbreiteter Befehl, daher sollten Sie zumindest einen Link zur Projektsite angeben.Eine Lösung zum Einfärben aller Arten von Text, nicht nur von Protokolldateien, ist das Python-Tool ' colout '.
Wobei jeder Text in der Ausgabe von 'myprocess', der mit Gruppe 1 des regulären Ausdrucks übereinstimmt, mit Farbe 1, Gruppe 2 mit Farbe 2 usw. gefärbt wird.
Zum Beispiel:
dh die erste reguläre Ausdrucksgruppe (parens) stimmt mit dem Anfangsdatum in der Protokolldatei überein, die zweite Gruppe stimmt mit einem Python-Dateinamen, einer Zeilennummer und einem Funktionsnamen überein, und die dritte Gruppe stimmt mit der Protokollmeldung überein, die danach kommt. Das sieht so aus:
Beachten Sie, dass Linien oder Teile von Linien, die mit keinem meiner regulären Ausdrücke übereinstimmen, weiterhin als Echo angezeigt werden. Dies entspricht also nicht 'grep --color' - nichts wird aus der Ausgabe herausgefiltert.
Offensichtlich ist dies flexibel genug, dass Sie es mit jedem Prozess verwenden können, nicht nur mit dem Tailing von Protokolldateien. Normalerweise ziehe ich jedes Mal, wenn ich etwas färben möchte, einen neuen Regex im Flug auf. Aus diesem Grund ziehe ich Colout jedem benutzerdefinierten Tool zum Färben von Protokolldateien vor, da ich nur ein Tool lernen muss, unabhängig davon, was ich färbe: Protokollierung, Testausgabe, Hervorheben von Codeausschnitten in der Syntax im Terminal usw.
quelle
Schamloser Plug: Ich habe ein Tool namens TxtStyle geschrieben , das etwas Ähnliches wie die zuvor erwähnten Optionen ausführt . Sie können es wie folgt ausführen:
Sie können auch benannte Stile in der Konfigurationsdatei (
~/.txts.conf
) definieren und wie folgt verwenden:(
ifconfig
Stil ist ab Werk definiert)quelle
grc sicher!
Passe deine Collors mit Regex in der Datei an: ~ .grc / conf.tail (oder wie auch immer du willst)
Befehlszeile:
Ergebnisse:
Informationen zum Konfigurieren von grc: https://github.com/manjuraj/config/blob/master/.grc/sample.conf
quelle
Ich habe eine Bash-Funktion geschrieben, die bis zu drei Parameter akzeptiert, einen Grep-ähnlichen Filter für eine Textdatei ausführt und Text in Farbe auf dem Bildschirm ausgibt.
Ich würde auch gerne eine Tail-Funktion sehen, die dies tun würde, aber noch keine gefunden habe.
Diese Funktion kann auch verbessert werden - ich würde mich über jede Hilfe freuen, um sie zu verbessern.
quelle
sicher !
Ich habe lange eine Funktion namens "egrepi" geschrieben, basierend auf den 8 Farbvariablendefinitionen. Dies funktioniert NUR wie eine "Schwanz-F" -Farbfunktion.
1. setColors
Zunächst werden die Farbvariablen aufgerufen:
2. egrepi
und die egrepi-Funktion, effektiv und elegant: Farbwechsel zwischen 8 oder mehr Farben (Ihre Bedürfnisse) UND getestet unter 3 verschiedenen Unix-Betriebssystemen, mit Kommentaren:
3. Nutzung
befehl | egrepi word1 .. wordN
quelle
Vielleicht möchten Sie auch einen Blick auf lwatch werfen :
tail -f /var/log/syslog | lwatch --input -
quelle
Für die Farbcodes würde ich tput verwenden:
Siehe als Referenz:
man tput
Dann:
quelle
Veröffentlicht vor einiger Zeit Node Js Utility - Log-Color-Highlight
quelle