2013-02-23 8 views
28

In Linux-Datei, ich weiß, wie man eine einfach Mitteilung an den /var/log/messages Datei zu schreiben, in einem einfachen Shell-Skript, das ich erstellt:Bash-Shell-Skript - auf Custom Log schreiben

#!/bin/bash 
logger "have fun!" 

Ich möchte werfen Nachrichten in stoppen die Standard-Datei /var/log/messages, und erstellen Sie meine eigenen. diese

Ich habe versucht:

#!/bin/bash 
logger "have more fun" > /var/log/mycustomlog 

Es protokolliert noch /var/log/messages. Es hat die /var/log/mycustomlog erstellt, aber es ist leer.

Wer sieht, was ich vermisse?

+4

können Sie nicht einfach ersetzen * Logger * mit * echo *? – jazzytomato

+0

Ich glaube nicht, dass Sie: http://stackoverflow.com/questions/13423303/how-can-i-log-to-a-specific-file-in-linux-using-logger-command – squiguy

+0

Redirecting Standard-Ausgabe funktioniert nicht, weil 'logger' nicht auf Standardausgabe schreibt; Es wird in die Datei geschrieben, die von 'syslog (3)' konfiguriert wurde, um Protokollnachrichten zu empfangen. – chepner

Antwort

24

@chepner machen einen guten Punkt, dass logger für das Protokollieren von Nachrichten gewidmet ist.

Ich muss erwähnen, dass @Thomas Haratyk einfach angefragt hat, warum ich nicht einfach echo verwendet habe.

Zu der Zeit wusste ich nicht über Echo, wie ich shell-scripting lerne, aber er hatte Recht.

Meine einfache Lösung ist jetzt das:

#!/bin/bash 
echo "This logs to where I want, but using echo" > /var/log/mycustomlog 

Das Beispiel wird überschrieben über die Datei nach dem>

Also, ich kann auf diese Datei mit diesem anhängen:

#!/bin/bash 
echo "I will just append to my custom log file" >> /var/log/customlog 

Danke Leute!

  • auf einer Seite beachten, es ist einfach meine persönliche Präferenz meiner persönlichen Protokolle in /var/log/ zu halten, aber ich bin sicher, dass andere gute Ideen gibt es da draußen. Und da ich keinen Dämon erstellt habe, ist /var/log/ wahrscheinlich nicht der beste Ort für meine benutzerdefinierte Protokolldatei. (Sage nur)
+3

'/ var/log' ist absolut der beste Ort für praktisch jede Art von Protokoll. –

+6

@Ansgar Kämpfen um eine skatologische Antwort zu unterlassen. –

3

Wenn Sie die man-Seite des Loggers sehen:

$ man logger 

LOGGER (1) BSD Allgemeine Befehle Handbuch LOGGER (1)

Name Logger - ein Shell-Befehl Schnittstelle zum syslog (3) Systemprotokoll Modul

SYNOPSE Loggers [-isd] [-f file] [-p pri] [-t tag] [-u Buchse] [Nachricht ... ]

BESCHREIBUNG Logger nimmt Einträge im Systemprotokoll vor. Es bietet eine Shell-Befehlsschnittstelle zum Systemprotokollmodul syslog (3).

Es sagt eindeutig, dass es im Systemprotokoll protokolliert wird. Wenn Sie sich in einer Datei anmelden möchten, können Sie ">>" verwenden, um zur Protokolldatei umzuleiten.

29

logger Protokolle zu Syslog-Einrichtungen. Wenn die Nachricht an eine bestimmte Datei gesendet werden soll, müssen Sie die Syslog-Konfiguration entsprechend ändern.Sie könnten eine Zeile wie folgt hinzufügen:

local7.* -/var/log/mycustomlog 

und Syslog neu starten. Dann können Sie wie folgt protokollieren:

logger -p local7.info "information message" 
logger -p local7.err "error message" 

und die Meldungen werden in der gewünschten Protokolldatei mit der richtigen Protokollstufe angezeigt.

Ohne Änderungen an die Syslog-Konfiguration machen könnten Sie logger wie folgt verwenden:

logger -s "foo bar" 2>> /var/log/mycustomlog 

Die logger anweisen würde die Nachricht an STDERR als auch (zusätzlich zur Protokollierung es zu syslog) zu drucken, so könnten Sie Leiten Sie STDERR in eine Datei um. Es wäre jedoch völlig sinnlos, weil die Nachricht sowieso bereits über Syslog protokolliert wird (mit der Standardpriorität user.notice).

5

Es gibt eine Menge Details zur Protokollierung von Shell-Skripten über globale Variablen der Shell. Wir können die ähnliche Art der Protokollierung in Shell-Skript emulieren: http://cubicrace.com/2016/03/efficient-logging-mechnism-in-shell.html

Der Beitrag enthält Details zu Protokollstufen wie INFO, DEBUG, ERROR Introducing. Ablaufverfolgung Details wie Skripteintrag, Skript-Exit, Funktionseingabe, Funktionsexit.

Beispielprotokoll: enter image description here