Wie kann ich alle Benachrichtigungen protokollieren? [Duplikat]

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.

Diese Antwort und diese geben an, dass es eine SQLite-Datenbank für das Benachrichtigungszentrum gibt. Es ist jedoch kein einfacher Klartext.

Antworten (3)

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.

Danke schön. PushBullet, Dropbox und die anderen Apps, die ich untersucht habe, scheinen die relevanten Daten jedoch leider nicht zu protokollieren. Ich habe die SQLite-Datenbanken abgelegt und nach Token/Strings gesucht, zu denen ich Informationen haben möchte (wie die Benachrichtigungstitel, Dateien, Quellen usw. - und es wurde nichts angezeigt.

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.