Pour approfondir la réponse fournie par @japanese et @arno-van-wyk...
Journalisation unifiée de macOS
Les informations suivantes sont à jour jusqu'à la version 10.15.4. Sachant qu'avec Apple, cela sera probablement obsolète dès la version 10.16.
Apple a remanié le système de journalisation de macOS dans la version 10.12 (Sierra), remplaçant le service de style syslog
traditionnel par un nouveau "système de journalisation unifié". Ce nouveau système, qui n'a pas de nom formel autre que "système de journalisation unifié" (ou os_log
dans les pages de manuel du système), a plusieurs objectifs - principalement axés sur le débogage des applications plutôt que sur la maintenance système. Le volume impressionnant de messages journaux générés sous ce régime est stupéfiant.
Bonne vue d'ensemble : https://eclecticlight.co/2018/03/19/macos-unified-log-1-why-what-and-how/
Concrètement, cela signifie que les événements journaux ne sont généralement pas consultables dans un fichier quelconque, par exemple /var/log/system.log
, ou même dans l'application Console. Plutôt, l'utilitaire en ligne de commande log
doit être utilisé ; ou l'une des applications fournies par eclecticlight.co, ci-dessus.
Génération de messages journaux
À partir de la version 10.15, l'interface syslog traditionnelle semble toujours fonctionner. Par exemple logger
fonctionne.
os_log
a plusieurs niveaux, dont Default, Info, Debug, et d'autres. Les niveaux syslog
semblent être mappés sur ceux-ci : clairement debug > Debug, info > Info, tous les autres à Default.
Consultation des messages journaux
-
utiliser la commande log
, référez-vous à la page de manuel pour les détails ; sous-commandes utiles :
show
: interroger les journaux
--info
et/ou --debug
pour voir les journaux de niveau info/debug ; il faut fournir les deux pour obtenir les deux
--last time[h|m|d]
: afficher les événements récents, sec/min/hrs/jours
stream
: suivre les journaux
--level info|debug
pour voir les messages info
; debug
inclut info
- peut fournir
--process (pid|name)
pour filtrer un nom de processus spécifique (raccourci pour --predicate "process ..."
)
- note : les sous-commandes varient dans la façon dont le niveau de journalisation est fourni et dans le support des noms de processus (yay pour la cohérence...)
-
la sortie peut être dans quelques formats différents, y compris :
--style compact
: le plus bref : horodatage (sans TZ), type abrégé (par exemple, Df
= Default, I
= Info, Db
= Debug), nom du processus et PID:ID de thread, et le message journal
--style syslog
: syslog traditionnel
- formats JSON et JSON lines (format NDJSON aka)
- ainsi que la forme "lisible par l'homme" complète par défaut
-
un mécanisme de "filtre" est fourni - et pratiquement requis - pour extraire les journaux désirés : --predicate [filtre]
- un filtre est un ou plusieurs motifs de la forme "[clé] [opérateur] [valeur]", par exemple
process == "logger"
- les opérateurs de chaîne sont sensibles à la casse et aux diacritiques par défaut, ajoutez
[cd]
pour rendre insensible à la casse
- les clés utiles sont
process
: nom du processus
eventMessage
: contenu du message
logType
: default
, info
, debug
, etc
- les opérateurs utiles sont
==
/BEGINSWITH
: correspondance de chaîne ancrée (==[cd]
pour une comparaison de chaîne insensible à la casse)
MATCHES
: regex ("Expressions régulières ICU")
- les regex sont ancrés au début et à la fin, c'est-à-dire
MATCHES "Foo"
ne fera pas correspondre "Foo était ici", tandis que MATCHES "Foo.*"
le fera ; MATCHES[cd] "foo.*"
aussi
- faites attention à échapper à
\
depuis le shell
Exemples
Tout ce qui a été journalisé par logger
au cours des 20 dernières minutes :
% for sev in alert error warning notice info debug; do
logger -p user.$sev "log test user.$sev"
done
% log show --style compact --info --debug --predicate 'process == "logger"' --last 20m
Filtrage des données journalières utilisant "process == "logger""
Horodatage Ty Process[PID:TID]
2020-05-22 21:06:05.697 Df logger[52036:f75d81] log test user.alert
2020-05-22 21:06:06.709 Df logger[52038:f75d8b] log test user.error
2020-05-22 21:06:07.721 Df logger[52040:f75d95] log test user.warning
2020-05-22 21:06:08.732 Df logger[52042:f75dad] log test user.notice
2020-05-22 21:06:09.741 I logger[52044:f75db7] log test user.info
2020-05-22 21:06:10.752 Db logger[52046:f75dbc] log test user.debug
Chaque message journal de la dernière 24 heures correspondant au regex .*log\s+test.*er.*
% log show --style compact --info --debug --predicate 'eventMessage MATCHES[cd] ".*log\\s+test.*er.*"' --last 24h
...
Flux continu des journaux de logger
:
% log stream --process logger --level debug --style syslog
Filtrage des données journales utilisant "process COMMENCEPAR[cd] "logger""
Horodatage (processus)[PID]
2020-05-22 21:16:16.593184+1000 localhost logger[52341]: log test user.alert
2020-05-22 21:16:16.599099+1000 localhost logger[52342]: log test user.error
2020-05-22 21:16:16.604287+1000 localhost logger[52343]: log test user.warning
2020-05-22 21:16:16.608727+1000 localhost logger[52344]: log test user.notice
2020-05-22 21:16:16.613164+1000 localhost logger[52345]: log test user.info
2020-05-22 21:16:16.617368+1000 localhost logger[52346]: log test user.debug
...
0 votes
Pouvez-vous améliorer votre question en mentionnant pourquoi vous le souhaitez ? Cela pourrait aider les gens à trouver des options pour vous.
0 votes
J'ai pu enregistrer avec succès une entrée : $ logger "Ceci est une entrée de journal" $ echo $? 0 Puis lorsque j'ai vérifié "Tous les messages" dans ma console, mon message est apparu.
0 votes
Est-ce que cela figure sous
System.log
?1 votes
Sorti avec le code de statut 1, aucune sortie. J'ai essayé avec le logger.
4 votes
Je ne vois pas non plus de fichier
Hello World
dans n'importe quel fichier/var/log/*.log
. Le comportement que @SG_ observe est reproductible sur mon Mac fonctionnant sous macOS 10.12. De plus,logger -s 'Hello World'
imprime correctement sur la console mais pas dans n'importe quel fichier de journal sur disque.3 votes
Ne s'affiche pas dans system.log pour moi, mais si je consulte "tous les logs" dans la console, il apparaît là. Bizarre!
0 votes
Je le trouve également dans la section "tous les journaux" de la console, mais le message
Failed to harvest strings for binary named '–Xó^H'
apparaît danssystem.log
.0 votes
Le problème n'est pas lié à SIP. Il semble y avoir un problème entre
asl
etsyslogd
.0 votes
Le fichier
/etc/asl.conf
qui configure commentasl
écrit dans/var/log/system.log
, n'a pas changé entreYosemite
etSierra
.