Vous consultez la documentation Apigee Edge.
Accédez à la
documentation**Apigee X**. info
La journalisation est l'un des moyens efficaces de déboguer les problèmes. Les informations sur la requête API, telles que les en-têtes, les paramètres de formulaire, les paramètres de requête, les variables dynamiques, etc., peuvent toutes être enregistrées pour référence ultérieure. Les informations peuvent être enregistrées localement sur les processeurs de messages (Apigee Edge pour le cloud privé uniquement) ou sur des serveurs tiers tels que Sumo Logic, Splunk ou Loggly.
Antimodèle
Dans le code ci-dessous, l'objet httpClient d'une règle JavaScript est utilisé pour enregistrer les données sur un
serveur Sumo Logic. Cela signifie que le processus de journalisation a lieu pendant le traitement de la requête/réponse. Cette approche est contre-productive, car elle augmente le temps de traitement, ce qui accroît les latences globales.
LogData_JS:
<!-- /antipatterns/examples/1-4.xml --> <Javascript async="false" continueOnError="false" enabled="true" timelimit="2000" name="LogData_JS"> <DisplayName>LogData_JS</DisplayName> <ResourceURL>jsc://LogData.js</ResourceURL> </Javascript>
LogData.js:
<!-- /antipatterns/examples/1-5.xml --> var sumoLogicURL = "..."; httpClient.send(sumoLogicURL); waitForComplete();
Le problème ici est l'appel à waitForComplete(), qui suspend les opérations de l'appelant jusqu'à la fin du processus de journalisation. Un modèle valide consiste à rendre cet appel asynchrone en l'éliminant.
Impact
- L'exécution du code de journalisation via la règle JavaScript augmente la latence de la requête API.
- Les requêtes simultanées peuvent solliciter les ressources du processeur de messages et, par conséquent, nuire au traitement des autres requêtes.
Bonnes pratiques
- Utilisez la règle MessageLogging pour transférer/enregistrer des données vers des serveurs de journaux ou des services de gestion de journaux tiers tels que Sumo Logic, Splunk, Loggly, etc.
- Le principal avantage de la règle MessageLogging est qu'elle peut être définie dans le flux Post Client, qui est exécuté une fois la réponse renvoyée à l'application cliente à l'origine de la requête.
- Le fait de définir cette règle dans le flux Post Client permet de séparer l'activité de journalisation et le traitement de la requête/réponse, ce qui évite les latences.
- S'il existe une exigence ou une raison spécifique de journaliser via JavaScript (et non l'option de flux Post
Client mentionnée ci-dessus), cela doit être fait de manière asynchrone. En d'autres termes,
si vous utilisez un objet
httpClient, vous devez vous assurer que JavaScript N'IMPLÉMENTE PASwaitForComplete.
Documentation complémentaire
- Règle JavaScript
- Règle MessageLogging
- Article de la communauté : Using httpClient from within JavaScript callout, is waitForComplete() necessary? (L'utilisation de httpClient dans un appel JavaScript est-elle nécessaire ?)