Exports NDJSON de log show et chronologies
Exporter les journaux unifiés macOS avec log show (styles ndjson, json, texte), éviter les pièges de fuseau horaire et bâtir des chronologies.
En bref. Pour une chronologie, exportez avec log show --info --debug --timezone UTC --style ndjson : un objet JSON par entrée, tous les champs conservés, les heures en UTC. Sachez quelles options vous avez utilisées, car les valeurs par défaut masquent les entrées Info, Debug et les signposts. Unified Log Parser lit ces exports et produit des fichiers CSV, NDJSON et Timesketch, à partir de fichiers tracev3 ou d'exports.
Les styles de sortie de log show
log show accepte cinq styles (log help show les liste) : default, syslog, json, ndjson et compact.
| Style | Une entrée correspond à | Conserve | Points de vigilance |
|---|---|---|---|
ndjson | un objet JSON par ligne | tous les champs | fichiers volumineux |
json | un objet dans un grand tableau | tous les champs | doit être analysé d'un bloc ou lu en flux |
default | une ligne de texte + lignes de continuation | heure, thread, type, activité, PID, TTL, processus, émetteur, subsystem:category | messages sur plusieurs lignes |
syslog | une ligne de type syslog | heure, hôte, processus, PID, émetteur | pas de colonne de type |
compact | une ligne courte | code de type, processus, PID, thread | millisecondes uniquement, aucun décalage UTC |
Les champs NDJSON comprennent timestamp, eventType, messageType, processImagePath, processID, threadID, userID, senderImagePath, subsystem, category, activityIdentifier, bootUUID, formatString et eventMessage ; les signposts ajoutent signpostName, signpostType et signpostScope. La dernière ligne d'un export NDJSON est un récapitulatif ({"count":…,"finished":1}), pas une entrée.
Les options qui changent le résultat
log show --archive case.logarchive --info --debug --timezone UTC --style ndjson > case.ndjson
--infoet--debug: sans elles, seuls les messages Default, Error et Fault sont affichés (ainsi que les activités et les états).--signpost: les signposts restent masqués sauf demande explicite.--timezone UTC: sinon, chaque entrée est affichée dans le fuseau horaire enregistré avec elle, et la variableTZn'est pas prise en compte sur les versions actuelles.--start/--end/--last: limitent la fenêtre ; les formats acceptés incluentYYYY-MM-DD HH:MM:SSet un décalage explicite.--predicate: filtre au moment de l'export — pratique, mais ce qui a été filtré est perdu.
Consignez la commande dans vos notes : deux exports de la même archive avec des options différentes constituent des preuves différentes.
Lire les exports dans le parseur
Déposez un export .ndjson, .json ou texte dans le parseur. Les exports sont lus en flux par blocs de 8 Mo : un tableau JSON de 400 Mo ne pose donc aucun problème. Les styles texte sont reconnus grâce à leur ligne d'en-tête (Timestamp Thread Type Activity PID TTL) ou à leurs premières lignes ; les lignes de continuation sont rattachées au message précédent. Un export en style compact est lu comme étant en UTC et signalé comme tel, car ce style ne porte aucun décalage.
Comparatif des parseurs
| Outil | Entrée | Remarques |
|---|---|---|
log show / Console | archive ou magasin actif, sur un Mac | la restitution de référence |
| Mandiant macos-unifiedlogs | tracev3 + uuidtext + timesync, tout OS | bibliothèque Rust et exemple unifiedlog_iterator (CSV / JSONL) |
Parseur Plaso unified_logging | tracev3 dans une image ou un dossier | à nommer explicitement : il ne fait pas partie du préréglage macOS par défaut |
mac_apt UNIFIEDLOGEXPORT | image disque | exporte les fichiers pour un parseur |
| Unified Log Parser | archive, dossiers, ZIP / tar.gz, exports | macos-unifiedlogs en WebAssembly avec corrections de fidélité à log show, filtres, triage, exports |
Validé sur une archive réelle, Unified Log Parser concorde avec log show pour environ 99 % des messages de type log, activity et state. Les écarts restants tiennent surtout aux décodeurs d'objets propres à Apple (par exemple un nom d'hôte restitué par log show là où le parseur affiche <private>), aux marqueurs de troncature sur les arguments très longs, et aux signposts, que log show restitue avec des marqueurs de description internes.
Construire une chronologie
Depuis le parseur, Exporter enregistre les entrées affichées — filtres et plage temporelle en cours — dans quatre formats :
- CSV : une ligne par entrée avec
timestamp_utc, type, nom et chemin du processus, PID, thread, identifiant utilisateur, subsystem, catégorie, émetteur, activité, message, chaîne de format, UUID de démarrage, indicateurs de triage et fichier source. Les cellules commençant par=,+,-ou@sont mises entre guillemets pour empêcher l'injection de formules dans les tableurs. - NDJSON : noms de champs de
log showavec des horodatages UTC (2026-09-14 10:05:02.610004+0000), plustriageFlagsetevidence. Réimportable. - JSON : les mêmes entrées dans une enveloppe qui consigne les fichiers sources, la plage temporelle et les filtres.
- CSV Timesketch : colonnes
message,datetime,timestamp_descettimestamp(en microsecondes), prêtes à l'import.
Exportez une fenêtre étroite et filtrée pour chaque question (par exemple « TCC et Terminal, 10:00–10:55 ») plutôt que le magasin entier : une chronologie est faite pour être lue.
Pour la suite : les requêtes de triage pour décider de ce qui entre dans la chronologie, ou le tutoriel dans le navigateur.