Zugriff auf protokollierte Meldungsdaten

Die protokollierten Meldungen werden in einer Ereignistabelle gespeichert, die Sie zur Unterstützung der Protokollierung einrichten. Sie können auf die protokollierten Meldungen zugreifen, indem Sie den Befehl SELECT auf der Ereignistabelle ausführen.

Bemerkung

Bevor Sie mit der Protokollierung von Meldungen beginnen können, müssen Sie eine Ereignistabelle einrichten. Weitere Informationen dazu finden Sie unter Einrichten einer Ereignistabelle.

Eine Ereignistabelle hat einen Satz von vordefinierten Spalten, die Informationen über die protokollierten Meldungen erfassen, einschließlich:

  • Der Zeitstempel für den Zeitpunkt, an dem die Meldung erfasst wurde.

  • Der Geltungsbereich des Protokollereignisses, z. B. der Name der Klasse, in der das Protokollereignis erstellt wurde.

  • Die Quelle des Protokollereignisses, einschließlich Datenbank, Schema, Benutzer, Warehouse usw.

  • Der Schweregrad des Protokolleintrags.

  • Die Protokollmeldung.

Referenzinformationen zu den Ereignistabellenspalten finden Sie unter Spalten von Ereignistabellen.

Beispiel für die Abfrage von Protokolldaten

In den folgenden Abschnitten wird anhand von Beispieldaten gezeigt, wie Sie die Ereignistabelle nach Protokollmeldungsdaten abfragen können.

Gesammelte Daten

Die Ausgabe im folgenden Beispiel zeigt den Inhalt einer ausgewählten Teilmenge von Spalten einer Ereignistabelle, nachdem Protokollmeldungen für zwei separate Handler erfasst wurden, von denen einer in Scala und der andere in Python geschrieben wurde.

Referenzinformationen zu Ereignistabellenspalten, die Protokollmeldungsdaten sammeln, finden Sie unter Daten zu Protokollereignissen.

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| TIMESTAMP           | SCOPE                             | RESOURCE_ATTRIBUTES   | RECORD_TYPE | RECORD                       | VALUE                                                      |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | { "name": "python_logger" }       | **See excerpt below** | LOG         | { "severity_text": "INFO" }  | Logging from Python module.                                |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | { "name": "python_logger" }       |                       | LOG         | { "severity_text": "INFO" }  | Logging from Python function start.                        |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | { "name": "python_logger" }       |                       | LOG         | { "severity_text": "ERROR" } | Logging an error from Python handler.                      |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:12:55 | { "name": "ScalaLoggingHandler" } |                       | LOG         | { "severity_text": "INFO" }  | Logging from within the Scala constructor.                 |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:12:56 | { "name": "ScalaLoggingHandler" } |                       | LOG         | { "severity_text": "INFO" }  | Logging from Scala method start.                           |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:12:56 | { "name": "ScalaLoggingHandler" } |                       | LOG         | { "severity_text": "ERROR" } | Logging an error from Scala handler: Something went wrong. |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

RESOURCE_ATTRIBUTES-Auszüge

Die folgenden JSON-Auszüge enthalten ein Spaltenattribut RESOURCE_ATTRIBUTES, dessen Daten in der vorherigen Ausgabe enthalten sind. Der SELECT-Abfragecode, der diesen Auszügen folgt, wählt den Wert von diesem Attribut aus.

Die Spalte RESOURCE_ATTRIBUTES enthält Daten zur Quelle des Ereignisses. Referenzinformationen dazu finden Sie unter RESOURCE_ATTRIBUTES-Spalte.

{
  ...
  "snow.executable.name": "ADD_TWO_NUMBERS(A FLOAT, B FLOAT):FLOAT"
  ...
}

{
  ...
  "snow.executable.name": "ADD_TWO_NUMBERS(A FLOAT, B FLOAT):FLOAT"
  ...
}

{
  ...
  "snow.executable.name": "ADD_TWO_NUMBERS(A FLOAT, B FLOAT):FLOAT"
  ...
}

{
  ...
  "snow.executable.name": "DO_LOGGING():VARCHAR(16777216)"
  ...
}

{
  ...
  "snow.executable.name": "DO_LOGGING():VARCHAR(16777216)"
  ...
}

{
  ...
  "snow.executable.name": "DO_LOGGING():VARCHAR(16777216)"
  ...
}
Copy

Abfragen mit SELECT-Anweisungen

Bei der Abfrage von Meldungsdaten können Sie Attributwerte innerhalb einer Spalte auswählen, indem Sie die Klammernotation im folgenden Format verwenden:

COLUMN_NAME['attribute_name']
Copy

Der Code im folgenden Beispiel fragt die vorherige Tabelle ab, um Daten zu isolieren, die sich auf die Protokollmeldungen des Python-Handlers beziehen. Die Abfrage wählt das Attribut severity_text aus, das den Schweregrad des Protokolleintrags enthält. Sie wählt den Inhalt der Spalte VALUE der Protokollmeldung aus.

Die Prozedur, die den Handler enthält, heißt do_logging. Beachten Sie, dass Sie den Prozedurnamen in Großbuchstaben angeben müssen, damit die Abfrage funktioniert.

SET event_table_name='my_db.public.my_event_table';

SELECT
  TIMESTAMP as time,
  RESOURCE_ATTRIBUTES['snow.executable.name'] as executable,
  RECORD['severity_text'] as severity,
  VALUE as message
FROM
  IDENTIFIER($event_table_name)
WHERE
  SCOPE['name'] = 'python_logger'
  AND RESOURCE_ATTRIBUTES['snow.executable.name'] LIKE '%DO_LOGGING%'
  AND RECORD_TYPE = 'LOG';
Copy

Abfrageergebnisse

Die Ausgabe im folgenden Beispiel veranschaulicht das Ergebnis der Abfrage.

----------------------------------------------------------------------------------------------------------------
| TIME                | EXECUTABLE                       | SEVERITY   | MESSAGE                                |
----------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | "DO_LOGGING():VARCHAR(16777216)" | "INFO"     | "Logging from Python module."          |
----------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | "DO_LOGGING():VARCHAR(16777216)" | "INFO"     | "Logging from Python function start."  |
----------------------------------------------------------------------------------------------------------------
| 2023-04-19 22:00:49 | "DO_LOGGING():VARCHAR(16777216)" | "ERROR"    | "Logging an error from Python handler" |
----------------------------------------------------------------------------------------------------------------