Default masking
The SDK automatically masks common sensitive query parameters, headers, and request/response body fields based on built-in patterns. For example, fields namedpassword, token, secret, or headers like Authorization are masked by default.
See the data privacy page for more information about default masking.
Custom masking
You can extend the default masking rules by providing additional regular expressions via themask_query_params, mask_headers, and mask_body_fields parameters. Patterns are case-insensitive and match anywhere within the name. Use ^ and $ anchors for exact matches.
Body field patterns recursively match keys in JSON objects and replace the corresponding values only when they are strings.
The following example uses FastAPI. The same masking options are available for all supported frameworks.
FastAPI example
Body masking callbacks
For more control over body masking, you can provide callback functions via themask_request_body and mask_response_body parameters. Each function receives the ended request ReadableSpan and the captured body as bytes. Request metadata is available through span.attributes. Each function should return the masked body as bytes, or None to mask the entire body.
Callback function examples
Callbacks are applied before pattern-based field masking. If the returned body contains JSON, it is still masked using the default and custom
mask_body_fields patterns.Log record masking callback
To mask sensitive data in application logs, provide a callback function via themask_log_record parameter. The function receives an OpenTelemetry ReadWriteLogRecord. You can modify the log message through record.log_record.body and structured fields through record.log_record.attributes. Return the same record to keep it, or None to drop it.
Callback function example