Stai visualizzando la documentazione di Apigee Edge.
Vai alla
documentazione di Apigee X. informazioni
Il logging è uno dei modi più efficienti per risolvere i problemi. Le informazioni sulla richiesta API, come intestazioni, parametri del modulo, parametri di query, variabili dinamiche e così via, possono essere registrate per riferimento futuro. Le informazioni possono essere registrate localmente sui processori di messaggi (solo Apigee Edge per il cloud privato) o su server di terze parti come Sumo Logic, Splunk o Loggly.
Antipattern
Nel codice seguente, l'oggetto httpClient
in un criterio JavaScript viene utilizzato per registrare i dati su un server Sumo Logic. Ciò significa che il processo di logging avviene in realtà durante l'elaborazione della richiesta/risposta. Questo approccio è controproducente perché aumenta il tempo di elaborazione, aumentando così le latenze complessive.
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();
La causa è la chiamata a waitForComplete()
, che sospende le operazioni del chiamante fino al completamento del processo di logging. Un pattern valido consiste nel rendere asincrono
l'eliminazione della chiamata.
Impatto
- L'esecuzione del codice di logging tramite il criterio JavaScript aumenta la latenza della richiesta API.
- Le richieste in parallelo possono sottolineare le risorse sul processore di messaggi e, di conseguenza, influire negativamente sull'elaborazione di altre richieste.
Best practice
- Utilizza il criterio MessageLogging per trasferire/registrare dati nei server di log o nei servizi di gestione dei log di terze parti come Sumo Logic, Splunk, Loggly e così via.
- Il principale vantaggio del criterio di logging dei messaggi è che può essere definito nel flusso post-client, che viene eseguito dopo che la risposta viene inviata all'app client che ha inviato la richiesta.
- La definizione di questo criterio nel flusso del client post consente di separare l'attività di logging dall'elaborazione della richiesta/risposta, evitando così latenze.
- Se esiste un requisito specifico o un motivo per eseguire il logging tramite JavaScript (non l'opzione del flusso
Post-client menzionata sopra), l'operazione deve essere eseguita in modo asincrono. In altre parole,
se utilizzi un oggetto
httpClient
, devi assicurarti che JavaScript NON implementiwaitForComplete