Comment utiliser la commande logger sur Sierra?


11

J'essaie de consigner les événements / points de contrôle à partir de mon script shell à l'aide de logger.

Comment utiliser loggerou syslogutilitaire sous OS X (version 10.12 (16A323)) . j'ai essayé

logger "Hello world"et vérifié à l' /var/log/system.logaide de l'application Console, voici l'entrée du journal créée

Impossible de récolter les chaînes pour le binaire nommé «–Xó ^ H»

Comment utiliser loggersous OS X? Y a-t-il quelque chose à spécifier pour créer / ajouter une entrée au journal système OS X?


Pourriez-vous, s'il vous plaît, améliorer votre question en mentionnant pourquoi vous le souhaitez? Cela pourrait aider les gens à trouver des options pour vous.
Harv

J'ai réussi à enregistrer une entrée: $ logger "Ceci est une entrée de journal" $ echo $? 0 Puis, lorsque j'ai coché "Tous les messages" dans ma console, mon message s'est affiché.
Harv

1
Quitté avec le code d'état 1, aucune sortie. J'ai essayé avec lo gg er.
SG_

3
Je vois aussi pas Hello Worlddans un /var/log/*.logfichier. Le comportement observé par @SG_ est reproductible sur mon Mac exécutant macOS 10.12. En outre, logger -s 'Hello World'imprime correctement sur la console, mais pas dans un fichier journal sur le disque.
Graham Miln

2
Ne s'affiche pas dans system.log pour moi, mais si je vois "tous les journaux" dans la console, il apparaît là-bas. Impair!
Harv

Réponses:


9

Parce que le système d'enregistrement d'Apple a changé dans macOS sierra. Ils passent de la fonction Apple System Log à la journalisation unifiée.

Voici un lien vers la documentation du développeur.

Ce qui suit filtre le nouveau journal unifié pour le texte "Message4me"

$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

=======

Si vous ajoutez --info, vous verrez également le message d'événement dans la sortie.

Dans les versions précédentes du système d'exploitation, la commande logger était envoyée au fichier /var/log/system.log si la priorité était suffisamment élevée (par exemple en utilisant -p alert) ainsi qu'à la base de données syslog. Dans Sierra, le fichier system.log n'est pas écrit lorsque l'enregistreur est utilisé avec -p alert -pas dans 10.12.1 de toute façon. Cela pourrait être un bug.

Vous pouvez toujours utiliser l'enregistreur pour envoyer au nouveau système de journalisation, mais vous devrez utiliser l'application Console ou l'utilitaire cli log ou la nouvelle API pour voir les résultats.


1
Il s'agit presque d'un lien uniquement et d'une réponse "peut-être". Un ~ profane ne comprendra pas ce que signifient vos commandes. Veuillez ajouter quelques explications.
klanomath

1
Quatre mois plus tard, et le lien est déjà rompu.
John Smith

Je pense que le lien actuel est: developer.apple.com/reference/os/logging
ktappe

2

J'ai résolu ce problème en ayant un script qui utilise netcat pour envoyer des journaux spécifiques toutes les 10 minutes à partir d'un launchdaemon. Modifiez au besoin.

#!/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

Ce n'est pas une vraie réponse mais une solution de contournement et trop longue pour un commentaire.

J'ai rencontré le même problème dans Sierra en essayant de consigner un script shell de mise à jour homebrew comprenant des commandes de journalisation (qui fonctionnaient dans El Capitan). J'ai dû abandonner l' enregistreur et j'ai simplement utilisé l'écho, la redirection de sortie et un nouveau fichier journal:

#!/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
....
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.