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)"
...
}
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']
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';
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" |
----------------------------------------------------------------------------------------------------------------