NDJSON-Exporte mit log show und Unified-Log-Zeitleisten
macOS Unified Logs mit log show exportieren (ndjson, json, Text), Zeitzonenfallen vermeiden, Parser vergleichen und CSV- oder Timesketch-Zeitleisten bauen.
Kurz gesagt. Für eine Zeitleiste exportieren Sie mit log show --info --debug --timezone UTC --style ndjson: ein JSON-Objekt pro Eintrag, alle Felder erhalten, Zeiten in UTC. Halten Sie fest, welche Optionen Sie verwendet haben, denn die Standardeinstellungen blenden Info, Debug und Signposts aus. Der Unified Log Parser liest diese Exporte und schreibt CSV-, NDJSON- und Timesketch-Dateien aus tracev3 oder aus Exporten.
Die Ausgabestile von log show
log show kennt fünf Stile (log help show listet sie auf): default, syslog, json, ndjson und compact.
| Stil | Ein Eintrag ist | Enthält | Achtung |
|---|---|---|---|
ndjson | ein JSON-Objekt pro Zeile | alle Felder | große Dateien |
json | ein Objekt in einem großen Array | alle Felder | muss als Ganzes geparst oder gestreamt werden |
default | eine Textzeile + Folgezeilen | Zeit, Thread, Typ, Activity, PID, TTL, Prozess, Sender, Subsystem:Kategorie | mehrzeilige Meldungen |
syslog | eine syslog-ähnliche Zeile | Zeit, Host, Prozess, PID, Sender | keine Typspalte |
compact | eine kurze Zeile | Typcode, Prozess, PID, Thread | nur Millisekunden, kein UTC-Offset |
Zu den NDJSON-Feldern gehören timestamp, eventType, messageType, processImagePath, processID, threadID, userID, senderImagePath, subsystem, category, activityIdentifier, bootUUID, formatString und eventMessage; Signposts ergänzen signpostName, signpostType und signpostScope. Die letzte Zeile eines NDJSON-Exports ist eine Zusammenfassung ({"count":…,"finished":1}), kein Eintrag.
Optionen, die das Ergebnis verändern
log show --archive case.logarchive --info --debug --timezone UTC --style ndjson > case.ndjson
--infound--debug: Ohne sie werden nur Default-, Error- und Fault-Meldungen angezeigt (plus Activities und State).--signpost: Signposts bleiben ausgeblendet, sofern Sie sie nicht anfordern.--timezone UTC: Andernfalls wird jeder Eintrag in der mit ihm gespeicherten Zeitzone ausgegeben, und die VariableTZwird in aktuellen Versionen nicht beachtet.--start/--end/--last: begrenzen das Zeitfenster; akzeptierte Formate sind unter anderemYYYY-MM-DD HH:MM:SSund ein expliziter Offset.--predicate: filtert schon beim Export – nützlich, aber was Sie herausgefiltert haben, bekommen Sie nicht zurück.
Notieren Sie den Befehl: Zwei Exporte desselben Archivs mit unterschiedlichen Optionen sind unterschiedliche Beweismittel.
Exporte im Parser lesen
Ziehen Sie einen .ndjson-, .json- oder Text-Export auf den Parser. Exporte werden in Blöcken zu 8 MB gestreamt, sodass auch ein JSON-Array von 400 MB kein Problem ist. Textstile werden an ihrer Kopfzeile (Timestamp Thread Type Activity PID TTL) oder an den ersten Zeilen erkannt; Folgezeilen werden in die vorherige Meldung eingefaltet. Ein Export im Stil compact wird als UTC gelesen und markiert, weil der Stil keinen Offset enthält.
Parser im Vergleich
| Werkzeug | Eingabe | Hinweise |
|---|---|---|
log show / Konsole | Archiv oder Live-Speicher, auf einem Mac | das Referenz-Rendering |
| Mandiant macos-unifiedlogs | tracev3 + uuidtext + timesync, jedes Betriebssystem | Rust-Bibliothek und Beispiel unifiedlog_iterator (CSV / JSONL) |
Plaso-Parser unified_logging | tracev3 in einem Image oder Ordner | explizit angeben: nicht im Standard-Preset für macOS enthalten |
mac_apt UNIFIEDLOGEXPORT | Disk-Image | exportiert die Dateien für einen Parser |
| Unified Log Parser | Archiv, Ordner, ZIP / tar.gz, Exporte | macos-unifiedlogs in WebAssembly mit Korrekturen für log show-Treue, Filter, Triage, Exporte |
An einem echten Archiv validiert, stimmte der Unified Log Parser bei rund 99 % der Log-, Activity- und State-Meldungen mit log show überein. Die verbleibenden Unterschiede betreffen vor allem Apples eigene Objekt-Decoder (etwa ein Hostname, den log show rendert, wo der Parser <private> zeigt), Kürzungsmarkierungen bei sehr langen Argumenten sowie Signposts, die log show mit internen Beschreibungsmarkierungen darstellt.
Eine Zeitleiste erstellen
Im Parser schreibt Exportieren die angezeigten Einträge – aktuelle Filter und Zeitraum – in vier Formaten:
- CSV: eine Zeile pro Eintrag mit
timestamp_utc, Typ, Prozessname und -pfad, PID, Thread, User-ID, Subsystem, Kategorie, Sender, Activity, Meldung, Formatstring, Boot-UUID, Triage-Markierungen und Quelldatei. Zellen, die mit=,+,-oder@beginnen, werden in Anführungszeichen gesetzt, um Formel-Injection in Tabellenkalkulationen zu verhindern. - NDJSON: Feldnamen von
log showmit UTC-Zeitstempeln (2026-09-14 10:05:02.610004+0000), dazutriageFlagsundevidence. Erneut importierbar. - JSON: dieselben Einträge in einer Hülle, die Quelldateien, Zeitraum und Filter festhält.
- Timesketch-CSV: die Spalten
message,datetime,timestamp_descundtimestamp(Mikrosekunden), bereit zum Import.
Exportieren Sie pro Fragestellung ein enges, gefiltertes Zeitfenster (zum Beispiel „TCC und Terminal, 10:00–10:55“) statt des gesamten Speichers: Zeitleisten sind zum Lesen da.
Weiter geht es mit den Triage-Abfragen, um zu entscheiden, was in die Zeitleiste gehört, oder mit der Browser-Anleitung.