Accès aux données des messages enregistrés

Les messages enregistrés sont stockés dans une table d’événements que vous avez configurée pour prendre en charge la journalisation. Vous pouvez accéder aux messages enregistrés en exécutant la commande SELECT sur la table d’événements.

Note

Avant de commencer à enregistrer des messages, vous devez configurer une table d’événements. Pour plus d’informations, reportez-vous à Configuration d’une table d’événement.

Une table d’événements comporte un ensemble de colonnes prédéfinies qui contiennent des informations sur les messages enregistrés, notamment :

  • L’heure à laquelle le message a été ingéré.

  • Le champ d’application de l’événement de journalisation, tel que le nom de la classe dans laquelle l’événement de journalisation a été créé.

  • La source de l’événement du journal, y compris la base de données, le schéma, l’utilisateur, l’entrepôt, etc.

  • Le niveau de gravité du journal.

  • Le message du journal.

Pour des informations de référence sur les colonnes de la table d’événements, voir Colonnes de table d’événements.

Exemple d’interrogation des données du journal

Les sections suivantes illustrent, à l’aide d’exemples, la manière dont vous pouvez interroger la table des événements pour obtenir des données sur les messages du journal.

Données collectées

L’exemple suivant montre le contenu d’un sous-ensemble sélectionné de colonnes d’une table d’événements après la capture de messages de journal pour deux gestionnaires distincts, l’un écrit en Scala et l’autre en Python.

Pour des informations de référence sur les colonnes de la table des événements qui collectent les données des messages du journal, reportez-vous à Données pour les journaux.

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 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. |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Extraits RESOURCE_ATTRIBUTES

Les extraits JSON suivants contiennent un attribut de colonne RESOURCE_ATTRIBUTES dont les données sont incluses dans la sortie précédente. Le code de requête SELECT qui suit ces extraits sélectionne la valeur de cet attribut.

La colonne RESOURCE_ATTRIBUTES contient des données sur la source de l’événement. Pour les informations de référence, voir Colonne RESOURCE_ATTRIBUTES.

{
  ...
  "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

Interrogation avec l’instruction SELECT

Lorsque vous interrogez les données d’un message, vous pouvez sélectionner les valeurs d’un attribut dans une colonne en utilisant la notation par crochets, comme dans le format suivant :

COLUMN_NAME['attribute_name']
Copy

Le code de l’exemple ci-dessous interroge le tableau précédent dans le but d’isoler les données relatives aux messages du gestionnaire Python. La requête sélectionne l’attribut severity_text pour la gravité de l’entrée du journal. Il sélectionne le contenu de la colonne VALUE pour le message d’enregistrement.

La procédure contenant le gestionnaire est appelée do_logging. Notez que vous devez spécifier le nom de la procédure en majuscules pour que la requête fonctionne.

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

Résultats de la requête

La sortie de l’exemple suivant illustre le résultat de la requête.

----------------------------------------------------------------------------------------------------------------
| 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" |
----------------------------------------------------------------------------------------------------------------