Remote logging
SDKs send logs to Hypertune Edge in the background. This allows you to:
See how often different parts of your flag logic are evaluated, e.g. to see how often different targeting rules are evaluated and passed in realtime
Log analytics events
Log split exposures, e.g. for A/B tests, multivariate tests and machine learning loops
See any SDK errors from the Hypertune UI
Manually flush logs
You can manually trigger and wait for logs to be flushed with the flushLogs
method:
This is a requirement in serverless and edge environments like Vercel deployments, Cloudflare Workers, AWS Lambdas, etc, where background SDK tasks like flushing logs aren't guaranteed to execute.
Configuring log flushing
Flush interval
By default, SDKs flush logs to Hypertune Edge every 2 seconds. You can adjust this interval by setting the remoteLogging.flushIntervalMs
option. For example, to flush logs every 10 seconds, set this option to 10_000
. Setting the value to null
disables automatic log flushing.
Logging mode
The logging mode determines which SDK log messages, expression evaluations, A/B test exposures, and analytics events are sent to the remote server. You can control this behaviour using the remoteLogging.mode
initialization option:
Custom logging endpoint
By default, SDKs send all log data to Hypertune servers via the https://gcp.fasthorse.workers.dev/logs
endpoint. If you're experiencing issues with ad blockers and want to ensure reliable data transmission, you can proxy these requests through your own server. To do this, set the remoteLogging.endpointUrl
option to an endpoint in your backend and then forward the requests to the default Hypertune endpoint from there using tools like Next.js redirects or a tool like http-proxy-middleware.
If you'd rather store and process Hypertune data within your own system, you can implement this behaviour in your custom remote logging endpoint. To help you do this we've published the OpenAPI contract for the logging endpoint here. You can use the contract to better understand the payload format the endpoint uses and to generate types in your language of choice.
Last updated