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?


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.


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

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
....
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.