Classer et comparer la gravité des niveaux de journalisation
Les niveaux de journalisation sont faciles à reconnaître, mais leur ordre devient vite incorrect lorsque la configuration, le filtrage ou les alertes sont assemblés dynamiquement.
Lancer gratuitement
Cette capacité applique la progression conventionnelle de trace à fatal, trie la liste que vous fournissez et compare deux niveaux dans la même requête. Elle renvoie les noms normalisés en minuscules, l’ordre de référence complet et une relation explicite exploitable dans vos scripts, tests, tableaux de bord et outils documentaires. Tout nom inconnu déclenche une erreur claire au lieu d’être deviné ou placé silencieusement dans le résultat.
Adoptez une seule échelle conventionnelle de gravité
La capacité suit l’ordre croissant reconnu trace, debug, info, warn, error, fatal. Trace désigne les événements de diagnostic les plus détaillés, tandis que fatal correspond aux défaillances susceptibles d’arrêter un processus ou de le rendre inutilisable. Envoyez les niveaux rencontrés dans le tableau <code>levels</code>. Le résultat contient <code>sorted_levels</code>, du moins grave au plus grave, et <code>severity_order</code> comme référence complète. Les doublons sont conservés, car ils peuvent représenter de véritables entrées d’une configuration, d’un échantillon ou d’un rapport. Le tri reste stable pour les valeurs égales. Les espaces sont retirés, la casse est ignorée et les noms reviennent sous leur forme canonique en minuscules. Le vocabulaire est volontairement strict : notice, verbose, warning, critical ou emergency sont refusés. Ces termes relèvent d’autres conventions et leur conversion exigerait une règle métier définie par vous. Ce refus explicite révèle les erreurs avant qu’elles ne perturbent le filtrage ou la gestion des incidents.
Interprétez le résultat de la comparaison
Renseignez <code>first</code> et <code>second</code> pour comparer deux niveaux pendant le tri. La réponse normalise les deux opérandes et fournit une <code>relation</code> du point de vue du premier. <code>more_severe</code> signifie que le premier apparaît plus loin dans l’ordre standard ; <code>less_severe</code>, qu’il apparaît plus tôt ; et <code>equal</code>, que les deux désignent le même niveau. La valeur signée <code>rank_difference</code> précise l’écart : un nombre positif favorise le premier, un nombre négatif le second et zéro indique l’égalité. Si les niveaux diffèrent, <code>more_severe</code> nomme directement le plus grave et évite au client de refaire le calcul. En cas d’égalité, ce champ est omis plutôt que défini à null. Ce format convient aux assertions et aux automatisations conditionnelles. Ainsi, warn comparé à error produit un écart négatif et désigne error comme plus grave. ERROR comparé à error devient égal après normalisation, sans affaiblir le contrôle du vocabulaire autorisé.
Intégrez le classement sans risque dans vos processus
Le classement par gravité est utile dès qu’une configuration textuelle doit conduire à une décision sans ambiguïté. Un lecteur de journaux peut ordonner les filtres avant de les afficher. Un contrôle de déploiement peut vérifier que le seuil de production est au moins warn. Un générateur documentaire peut présenter les niveaux de façon cohérente même si le fichier source les mélange. Des tests de supervision peuvent comparer le seuil configuré au minimum requis et bloquer une version avant la production. La fonction est déterministe et n’effectue aucune requête réseau : une même entrée donne toujours la même sortie dans le navigateur et via l’API. Cet outil classe des noms ; il n’analyse pas les lignes, ne déduit pas le niveau d’un message et ne convertit pas des systèmes incompatibles comme syslog et des libellés personnalisés. Si votre système utilise notice, critical, panic, off ou des nombres, convertissez-les selon votre politique documentée. Le refus des entrées inconnues empêche une faute de frappe de masquer discrètement un événement important.
Cas d’usage
Normaliser une configuration de journalisation
Classez les niveaux sélectionnés dans l’ordre conventionnel et obtenez des noms cohérents en minuscules.
Contrôler un seuil d’alerte
Comparez le niveau configuré au minimum exigé et exploitez la relation explicite dans un test de déploiement.
Produire une documentation ordonnée
Transformez une liste quelconque de niveaux pris en charge en progression prévisible pour vos pages de référence.
Questions fréquentes
Quel est l’ordre de gravité ?
Du moins grave au plus grave : trace, debug, info, warn, error et fatal.
Les noms en majuscules sont-ils acceptés ?
Oui. Les espaces sont retirés, la comparaison ignore la casse et le résultat utilise les minuscules canoniques.
Que deviennent les niveaux en double ?
Les doublons sont conservés. Les entrées égales gardent leur ordre relatif initial.
Puis-je utiliser warning ou critical ?
Non. Seuls trace, debug, info, warn, error et fatal sont acceptés ; toute autre convention exige une correspondance explicite définie par vous.
Comment interpréter rank_difference ?
Il s’agit du rang du premier niveau moins celui du second. Une valeur positive favorise le premier, une valeur négative le second et zéro indique l’égalité.
Combien coûte une requête API ?
Chaque requête API coûte $0.002. La même capacité déterministe peut aussi être utilisée gratuitement dans le navigateur.
Pour les développeurs — accès API
Tout sur cette page est disponible par programmation. Cette section s'adresse aux équipes qui veulent l'intégrer à leurs systèmes ; les autres peuvent simplement utiliser l'outil ci-dessus.
Endpoint
Authentification par jeton Bearer : un seul POST met la tâche en file d’attente, et le résultat vous parvient par webhook ou lien signé.
Appeler depuis votre stack
curl -X POST https://api.kit.forhosting.com/dev/log-level-severity-rank \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"levels":["error","debug","fatal","info"],"first":"warn","second":"error"}'const res = await fetch("https://api.kit.forhosting.com/dev/log-level-severity-rank", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"levels": [
"error",
"debug",
"fatal",
"info"
],
"first": "warn",
"second": "error"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/log-level-severity-rank",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"levels": [
"error",
"debug",
"fatal",
"info"
],
"first": "warn",
"second": "error"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/log-level-severity-rank", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"levels":["error","debug","fatal","info"],"first":"warn","second":"error"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"levels":["error","debug","fatal","info"],"first":"warn","second":"error"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/log-level-severity-rank", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemple de requête
{
"levels": [
"error",
"debug",
"fatal",
"info"
],
"first": "warn",
"second": "error"
}Exemple de réponse
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.log_level_severity_rank",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L’API est asynchrone : chaque appel renvoie un task_id immédiatement, puis vous interrogez l’état à raison d’une requête par seconde.
Tarifs
Le prix est publié, sans tokens ni crédits. Une tâche qui échoue n’est pas facturée.
Limites
max_items | 1000 |
Erreurs
| HTTP | Code | Signification |
|---|---|---|
401 | unauthorized | Clé API absente ou invalide : vérifiez l’en-tête Authorization. |
402 | insufficient_balance | Solde insuffisant : rechargez votre compte pour lancer cette tâche. |
404 | unknown_type | Type de tâche inconnu : vérifiez le champ type de votre requête. |
429 | rate_limited | Trop de requêtes : ralentissez la cadence, puis réessayez. |