Wie verwende ich den Logger-Befehl in Sierra?

11

Ich versuche, Ereignisse / Prüfpunkte aus meinem Shell-Skript mit zu protokollieren logger.

Verwendung loggeroder syslogDienstprogramm in OS X (Version 10.12 (16A323)) . Ich habe versucht

logger "Hello world"und /var/log/system.logmit der Konsolen-App überprüft , wurde der folgende Protokolleintrag erstellt

Fehler beim Ernten von Zeichenfolgen für Binärdateien mit dem Namen '–Xó ^ H'

Wie loggerin OS X verwenden? Muss etwas angegeben werden, um einen Eintrag zum OS X-Systemprotokoll zu erstellen / hinzuzufügen?

SG_
quelle
Könnten Sie bitte Ihre Frage verbessern, indem Sie angeben, warum Sie möchten? Das könnte den Leuten helfen, Optionen für Sie zu finden.
Harv
Ich konnte einen Eintrag erfolgreich protokollieren: $ logger "Dies ist ein Protokolleintrag" $ echo $? 0 Als ich dann in meiner Konsole "Alle Nachrichten" aktiviert habe, wurde meine Nachricht angezeigt.
Harv
1
Beendet mit Statuscode 1, keine Ausgabe. Ich habe es mit lo gg er versucht .
SG_
3
Ich sehe auch keine Hello Worldin irgendeiner /var/log/*.logDatei. Das Verhalten, das @SG_ sieht, ist auf meinem Mac unter macOS 10.12 reproduzierbar. Druckt außerdem logger -s 'Hello World'korrekt auf der Konsole, jedoch nicht in einer Protokolldatei auf der Festplatte.
Graham Miln
2
Wird für mich nicht in system.log angezeigt, aber wenn ich "alle Protokolle" in der Konsole ansehe, wird es dort angezeigt. Seltsam!
Harv

Antworten:

9

Weil sich Apples Protokollierungssystem in macOS sierra geändert hat. Sie wechseln von der Apple System Log-Funktion zur einheitlichen Protokollierung.

Hier ist ein Link zur Entwicklerdokumentation.

Im Folgenden wird das neue einheitliche Protokoll nach dem Text "Message4me" gefiltert.

$logger -is -t LogTest "Message4Me" 
Oct 15 13:19:27  LogTest[51173] <Notice>: Message4Me

$log show --predicate 'eventMessage contains "Message4Me"' --last 3m

Skipping info and debug messages, pass --info and/or --debug to include.
Filtering the log data using "eventMessage CONTAINS "Message4Me""
Timestamp                       Thread     Type        Activity             PID    
2016-10-15 13:19:27.666574+0900 0x33b62c   Default     0x0                  51173  logger: Message4Me
 --------------------------------------------------------------------------------------------------------------------
Log      - Default:          1, Info:                0, Debug:             0, Error:          0, Fault:          0

=======

Wenn Sie --info hinzufügen, wird die Ereignismeldung selbst auch in der Ausgabe angezeigt.

In früheren Betriebssystemversionen wurde der Befehl logger an die Datei /var/log/system.log gesendet, wenn die Priorität hoch genug war (z. B. mithilfe der Warnung -p), sowie an die Syslog-Datenbank. In Sierra wird das system.log ohnehin nicht geschrieben, wenn der Logger mit -p alert -not in 10.12.1 verwendet wird. Dies könnte ein Fehler sein.

Sie können den Logger weiterhin zum Senden an das neue Protokollierungssystem verwenden, müssen jedoch die Konsolen-App oder das CLI-Protokolldienstprogramm oder die neue API verwenden, um die Ergebnisse anzuzeigen.

japanisch
quelle
1
Dies ist fast nur ein Link und eine "vielleicht" Antwort. Ein Laie wird nicht verstehen, was Ihre Befehle bedeuten. Bitte fügen Sie eine Erklärung hinzu.
Klanomath
1
Vier Monate später ist die Verbindung bereits unterbrochen.
John Smith
Ich denke, der aktuelle Link lautet: developer.apple.com/reference/os/logging
ktappe
2

Ich habe dieses Problem gelöst, indem ich ein Skript verwendet habe, das Netcat verwendet, um alle 10 Minuten bestimmte Protokolle von einem Launchdaemon zu senden. Nach Bedarf bearbeiten.

#!/bin/bash

while read line    
do
    #drop log entries in the log file you don't want to sent to syslog server
   if [[ "$line" =~ ^.*recurring\ check-in.* || "$line" =~ ^.*Executing\ Policy\ Update\ Inventory.* ]]; then
     /bin/echo "" > /dev/null;
   else
     ## send logs to syslog server using netcat. Edit IP and UDP port as necessary
     echo $line | nc -v -u -w 0 10.10.1.9 514
   fi
done < /var/log/system.log
Jeff Holland
quelle
1

Dies ist keine echte Antwort, sondern eine Problemumgehung und zu lang für einen Kommentar.

Ich hatte das gleiche Problem in Sierra, als ich versuchte, ein Homebrew-Update-Shell-Skript mit Logger- Befehlen zu protokollieren (was in El Capitan funktionierte). Ich musste den Logger verlassen und einfach Echo, Ausgabeverleitung und eine neue Protokolldatei verwenden:

#!/bin/bash

Brew=/usr/local/bin/brew
Brewup_Log=/Users/user/Library/Logs/brewup.log

echo "$(date "+%Y.%m.%d %H:%M:%S")" >> $Brewup_Log 2>&1
$Brew update 2>&1 >>$Brewup_Log
....
Klanomath
quelle