Dropbox, PushBullet, Thunderbird und ein Dutzend anderer Apps erstellen Benachrichtigungen. Ist es möglich, diese auf Unix-ähnliche Weise zu protokollieren?
Ich mag die winzigen Nachrichten nicht, die für ein paar Sekunden auftauchen und dann spurlos verschwinden.
Grundsätzlich möchte ich in der Lage sein, eine Datei zu grep, die eine Zeile für jede Benachrichtigung enthält.
Wie von Arthur Hammer verlinkt, gibt https://apple.stackexchange.com/a/142811/37689 an, dass Benachrichtigungen in einer SQLite-Datenbank gespeichert werden. Das folgende Python-Skript sollte Ihnen den Einstieg erleichtern:
#!/usr/bin/env python
import os
import re
import sqlite3
# Location of notification centers database under Yosemite
tmp = os.environ['TMPDIR']
conn = sqlite3.connect(tmp + '/../0/com.apple.notificationcenter/db/db')
for notification in conn.execute('SELECT * from notifications'):
encoded_data = str(notification[-1]) # last item
clean = re.sub('[^\w\s-]', '', encoded_data) # remove some funny stuff (fixme: removes too much?)
sp = clean.split('\t')
# Find NSActualdeliverydate, message content seems to always come after this
for ix in range(len(sp)):
if 'NSActualdeliverydate' in sp[ix]:
break
# Skip blanks
for ix in range(ix+1, len(sp)):
if sp[ix] != '': break
print 'notification', sp[ix].replace('_', '\n').strip()
conn.close()
Sie können dies dann entweder an eine Datei weiterleiten und dann die Datei grep oder einfach die Ausgabe des Skripts direkt grep.
Die Antwort von @oystein ist großartig, aber ich denke, sie funktioniert nur für Yosemite, weil die SQLite-DB für High Sierra ein anderes DB-Modell ist ...
Also habe ich dieses einfache Tool gefunden ... (das für High Seirra perfekt funktioniert) https://github.com/ydkhatri/MacForensics/blob/master/macNotifications.py
Führen Sie einfach mit Ihrem DB-Pfad-Eingabe- und Ausgabepfad .csv aus, den Sie erstellen möchten
Hinweis: Um Ihren Benachrichtigungscenter-DB-Pfad zu finden, sehen Sie sich Folgendes an ... https://stackoverflow.com/a/26777027
Viel Glück und Viel Spaß!
Suchen Sie zuerst die SQLite-Dateien db und db-wal, in denen sich die Benachrichtigung befindet. Wie in Mojave, kann mit diesem Befehl gefunden werden:
lsof -p $(ps aux | grep -m1 usernoted | awk '{ print $2 }')| awk '{ print $9 }' | grep 'db2/db$' | xargs dirname
Dann ist, wie @greenhouse erwähnt, das MacFronsics-Skript eine gute Wahl, um die db-Datei zu analysieren. Soweit ich das getestet habe, unterstützt das Skript auch Mojave.
Falls jemand die neueste Benachrichtigung nicht erhält, befinden sich die neuesten Benachrichtigungen wahrscheinlich nicht in der Hauptdatenbank. Das direkte Analysieren der DB-Datei würde mit alten Benachrichtigungen enden. Wenn Sie die neuesten Benachrichtigungen wünschen, denken Sie daran, zuerst den Datensatz in der Datei db-wal (Write AHead Log) in db zu migrieren.
Arthur