Configuration of HERE Anonymizer Self-Hosted
Service configuration
The basic configuration of HERE Anonymizer Self-Hosted is performed by setting environment variables in the runtime environment.
For example, the Docker quick start example uses this configuration:
SOURCE_URI=rabbit://guest:guest@rabbit:5672/input-queue
SOURCE_FORMAT=HERE_PROBE
SINK_URI=rabbit://guest:guest@rabbit:5672/output-queue
SINK_FORMAT=HERE_PROBE
SOURCE_COMPRESSION_FORMAT=NONE
SINK_COMPRESSION_FORMAT=NONE
MANAGEMENT_URI=rabbit://guest:guest@rabbit:5672/anon-management-queue
ANONYMIZATION_CONFIG_FILE=/opt/anonymization.conf
BOOTSTRAP_SERVER_URI=http://bootstrap:8083Note
The provided sample configuration is for local in-Docker deployments. When deploying the application in other environments,set the environment variables following instructions from the relevant deployment guide. The
MANAGEMENT_URIis optional. If not set, the broadcast queue for config updates is disabled.
SOURCE_URI
The SOURCE_URI variable defines the location of the data source.
In the example configuration, the input data source is located in-Docker, locally to the application. The data comes from
input-queue of the rabbit host using RabbitMQ data connector with guest:guest credentials.
See Data connectors in HERE Anonymizer Self-Hosted for all the supported URI options.
Note
You can use environment variable substitution when setting
SOURCE_URI. For example, this is how you pass the password available in aRABBIT_PASSvariable:SOURCE_URI=rabbit://guest:${RABBIT_PASS}@rabbit:5672/input-queue
SINK_URI
The SINK_URI variable defines the destination of the anonymized output data.
In the example configuration, the output data is saved in-Docker, locally to the application. The data is sent to the output-queue of the rabbit host
using RabbitMQ data connector with guest:guest credentials.
Note
You can use environment variable substitution when setting
SINK_URIsame as in the case ofSOURCE_URI.
SOURCE_FORMAT
The SOURCE_FORMAT variable defines the expected format of input data messages. To learn more, see Data message formats in HERE Anonymizer Self-Hosted.
Some data connectors support format auto-detection.
SINK_FORMAT
The SINK_FORMAT variable defines the expected format of output data. To learn more, see Data message formats in HERE Anonymizer Self-Hosted.
SOURCE_COMPRESSION_FORMAT
The SOURCE_COMPRESSION_FORMAT variable defines the expected compression format of input data messages. The available values are:
GZIP- Compresses message data to Gzip format.NONE- Applies no compression.
SINK_COMPRESSION_FORMAT
The SINK_COMPRESSION_FORMAT variable defines the expected compression format of output data. The available values are:
GZIP- Compresses message data to Gzip format.NONE- Applies no compression.
MANAGEMENT_URI
The MANAGEMENT_URI (optional) variable defines the location of anonymization management queue source. The queue accepts anonymization configuration or license data. To learn more, see Anonymization management queue.
WEBHOOK_URL
The optional WEBHOOK_URL variable defines the URL of the HTTP/HTTPS listener
responsible for triggering automation processes based on the current status of the anonymization flow.
BOOTSTRAP_SERVER_URI
The BOOTSTRAP_SERVER_URI variable specifies the URI for an HTTP/HTTPS server.
The server specified in the variable allows updating and retrieving the Anonymizer license and the anonymization config through PUT and GET requests.
If you don't set this variable, configuration and license updates are lost when Flink restarts.
Example:
# Call this URL during anonymization process.
WEBHOOK_URL=http://some.webhook.listener/notify-anonymization-flow-passing
# Optional configuration. Sets webhook execution interval to 90 seconds. The default value is 60 seconds.
WEBHOOK_INTERVAL=90
# Optional configuration. Sets HTTP request timeout to 10 seconds. The default value is 30 seconds
WEBHOOK_TIMEOUT=10After applying the example configuration, the system calls the configured URL every 90 seconds by an HTTP POST request that contains the minimum and maximum timestamps of successfully anonymized probe data points and has the content type set to application/json.
The webhook notification JSON payload example:
{
"minTime": "2023-05-07T19:42:00Z",
"maxTime": "2023-05-07T19:42:30Z"
}Note
As timestamps of
minTimeandmaxTimeare the timestamps of already anonymized probe data points (the number of these points is reduced by making gaps and applying other anonymization techniques like start-cutting), they don't show the last read point precisely.When you create an automation for source data retention, consider delaying the execution of automation after getting notified by this webhook.
ANONYMIZATION_CONFIG_FILE
The ANONYMIZATION_CONFIG_FILE variable defines the absolute path to the anonymization configuration file.
The file must be accessible from the jobmanager Docker container so that it can be mounted as a Docker volume.
Anonymization configuration
The anonymization configuration must be stored in a HOCON format file.
The following configuration file anonymization.conf is used by the quick start example:
useCase {
# Minimum number of points required in input trace chunk to apply anonymization.
# Default value is "0". [Optional]
minInputPointsCount: 0
# Minimum number of points required in output (anonymized) trace chunk to be published.
# Default value is "0". [Optional]
minOutputPointsCount: 0
# Minimum required trace chunk length (in seconds) to apply anonymization.
# Value must be greater or equal to zero. Default value is "0". [Optional]
minInputChunkSeconds: 0
}
attributes {
# Enables/disables keeping the altitude (elevation) value
# of probe datapoints.
disableAltitudeOutput: true
# Leave blank to keep the original provider name.
outputProviderName: DEFAULT
extendedAttributes {
# Configures which extended attributes are retained for points and messages,
# if supported by the selected data format.
#
# Supported values for `keep` are: true, false, all.
#
# - `false` (default): Do not keep any extended attributes.
# - `true` : Keep only the attributes explicitly listed in the `message` and `point` fields below.
# `message` and `point` fields must be defined and at least one must be non-empty.
# - `all` : Keep all point and message attributes.
# ⚠️ Setting `keep=all` may have a negative impact on the anonymity level.
# Any revealing attributes added to the source data will also be retained,
# potentially exposing sensitive information.
keep: false
# Enumerate the names of point or message attributes to keep.
# Applied only if 'keep=true' is set in the previous line.
message: []
point: []
}
}
anonymization {
# Min and max size of anonymized trajectories. [Required]
outputTraceDuration: {
min: 120
max: 180
}
# Min and max size of gaps between anonymized trajectories. [Required]
gapDuration: {
min: 30
max: 60
}
# Enables/disables removing zero speed points from anonymized trajectories.
removeZeroSpeedPoints: true
# Enables/disables speed calculation for every probe point having zero or undefined speed.
# Speed will be calculated based on the previous probe point location and timestamp.
calculateSpeedIfZero: false
# Min and max distance between adjacent points in anonymized trajectories. [Optional]
samplingRate: {
min: 1
max: 1
}
# Start-cut option allows to publish only those points from the trace start,
# that meet the set condition.
# Units: time - seconds, proximity - meters, speed - kilometers per hour (kmh).
# Empty or no value means no start-cutting. [Optional]
startCut {
publishAfter: "time > random[30..60] and (speed > 40 or proximity > 500)"
}
# End-cut option allows to publish only those points from the trace end,
# that meet the set condition.
# Units: time - seconds, proximity - meters, speed - kilometers per hour (kmh).
# In real-time anonymization there are no trace ends.
# Use this option only when stay point obfuscation is enabled.
# Empty or no value means no end-cutting. [Optional]
endCut {
publishUntil: "time > random[60..90] and (speed > 20 or proximity > 200)"
}
stayPoint.obfuscation: {
# Enables/disables stay point obfuscation - predicting stay point
# zones and cutting them from anonymized trajectories.
# Default value is "false". [Optional]
enabled: true
# Enables/disables advanced stay point prediction algorithm.
# Should not be applied if the number of dropped points in
# HERE_anonymization_point_dropped_stay_point is too big.
# Default value is "false". [Optional]
enablePrediction: false
# If stay point obfuscation is enabled and some stay point zone is detected,
# the N seconds of current chunk before the first point of that stay point
# zone will be obfuscated as well.
# Default value is "0" (means no preliminary gap). [Optional]
gapBeforeSize.seconds: 304
# If stay point obfuscation is enabled, then the given speedThreshold defined
# in kilometers per seconds will be used for the stay point detection.
# Default value is "5". [Optional]
speedThresholdKph: 5
}
}Note
Please note, that if you decide to keep any extended attributes the HERE Anonymizer Self-Hosted does not modify any of these. This might significantly worsen the results of the anonymization if these fields contain personal information (e.g. with VIN or name of the driver).
Configuration of anonymization methods
Anonymization methods are configured in the anonymization section of the anonymization.conf configuration file.
Origin-destination obfuscation
...
anonymization {
...
originDestination.obfuscation:
# Enables/disables origin-destination obfuscation.
# Default value: "false".
enabled: true
# If origin-destination obfuscation is enabled, you must provide at least one
# area URI. These are GeoJSON files that can be hosted on AWS S3, Azure blob or local filesystem.
areaUris: [
"s3://some-bucket/some-country.json",
"az+blob://some-container/some-country.json",
"file://some-path/some-country.json"
]
# If enabled, points in the origin or destination area which are not
# at the start or end of the trace are not removed.
ignoreRepeatingRegion: true
# Rounding of timestamps enabled by setting values different than 0.
# Setting to 3600 means that rounding happens to the hour.
timeWindowSeconds: 3600
...
}Region selection inclusion
Region selection inclusion regions must be provided in JSON files that comply with the GeoJSON standard.
...
anonymization {
...
region.selection:
# Enables/disables region selection.
# Default value: "false".
enabled: true
"include" {
# If region selection is enabled then you can provide one or more
# region URIs. These can be files from AWS s3, Azure blob or local system.
regionUris: [
"s3://some-bucket/some-country.json",
"az+blob://some-container/some-country.json",
"file://some-path/some-country.json"
]
# Defines what happens to to trajectory points which are outside of the provided regions.
# Available values:
# - keep: points are kept and are subject to downstream algorithms
# - drop: points are dropped
# Default value: "drop".
outerPointStrategy: drop
}
exclude: {
...
}
...
}Region selection exclusion
Region selection exclusion regions must be provided in JSON files that comply with the GeoJSON standard.
...
anonymization {
...
region.selection:
# Enables/disables region selection.
# Default value: "false".
enabled: true
"include" {
...
}
exclude: {
# If region selection is enabled then you can provide one or more
# region URIs. These can be files from AWS s3, Azure blob or local system.
regionUris: [
"s3://some-bucket/some-country.json",
"az+blob://some-container/some-country.json",
"file://some-path/some-country.json"
]
}
...
}Whitelisting
Whitelisted areas must be provided in JSON files that comply with the GeoJSON standard.
...
anonymization {
...
whitelist.area:
# Enables/disables whitelisting.
# Default value: "false".
enabled: true
# If whitelisting is enabled, you must provide at least one
# area URI. These are GeoJSON files that can be hosted on AWS S3, Azure blob or local filesystem.
areaUris: [
"s3://some-bucket/some-country.json",
"az+blob://some-container/some-country.json",
"file://some-path/some-country.json"
]
...
}Probe event handling
Probe event handling configuration example:
keep- Probe events matchingtypeandsubTypewill be kept (no anonymization feature will be applied)typeis mandatory, case-insensitive, regex pattern.subTypeis optional, case-insensitive, regex pattern.extendedAttributesmentioned extended attributes will persist rest will be dropped.
drop- Probe events matchingtypeandsubTypewill be dropped.typeis mandatory, case-insensitive, regex pattern.subTypeis optional, case-insensitive, regex pattern.
regular- Probe events matchingtypeandsubTypewill be subject to regular anonymization.typeis mandatory, case-insensitive, regex pattern.subTypeis optional, case-insensitive, regex pattern.extendedAttributesmentioned extended attributes will persist rest will be dropped. Please notekeepoverrulesdropin case event type/subType would match.
...
anonymization {
...
events:
keep: [
{
type: "Crash"
subType: "airbags"
extendedAttributes: ["front","back"]
},
{
type: "Adas"
subType: ""
extendedAttributes: ["auto-brake","reverse-park"]
}
]
drop: [
{
type: "Weather"
subType: "RAIN"
}
]
regular: [
{
type: "DEFAULT"
subType: ""
extendedAttributes: ["temp","distance"]
}
]
...
}POI proximity data removal
POIs must be provided in JSON files that comply with the GeoJSON standard.
...
anonymization {
...
poi.proximity.removal:
# Enables/disables POI proximity data removal.
# Default value: "false".
enabled: true
# If POI proximity data removal is enabled then you need to provide one or more
# POI set URIs. These can be files from AWS s3, Azure blob or local system.
poiSetUris: [
"s3://some-bucket/some-pois.json",
"az+blob://some-container/some-pois.json",
"file://some-path/some-pois.json"
]
...
}POI configuration
POI configuration files are JSON files that comply with the GeoJSON standard.
{
"type": "GeometryCollection",
"properties": {
"proximity": "100"
},
"geometries": [
{
"type": "Point",
"coordinates": [52.5200, 13.4050]
}
]
}The main GeoJSON type is GeometryCollection. A GeometryCollection is a collection of any GeoJSON geometries. In this case, it's limited to the Point type.
It requires a properties section with the proximity value provided in meters. This value applies to all POIs in this file.
The geometries section is an array and can contain multiple POIs. Each POI/point must have exactly one pair of coordinates.
Note
You can verify GeoJSON files at https://geojson.io.
Junction-based gapping
To enable Junction-based gapping, add the anonymization.junctionSources section to the configuration file.
junctionSources: {
# The proximity to GeoJSON junction points where a vehicle is considered as "on the junction".
# Used as a fallback if a junction GeoJSON feature does not define its own "proximity" property.
defaultProximityInMeters: 50,
# Configure one or more junction data files.
# For large datasets, consider using partitioned data (see "partitions" section below).
# At least one of "files" or "partitions" must be configured.
# If both are present, the "files" section takes precedence.
files: [
"s3://awskey:awssecret@some-bucket/path/to/junctions/special-junctions.json?region=eu-west",
]
# Partitions are GeoJSON files containing junctions for specific HERE Tiles.
# Each partition must represent a HERE Tile of the same zoom level as every other partition.
# Refer to HEREtile tiling scheme documentation:
# https://www.here.com/docs/bundle/introduction-to-mapping-concepts-user-guide/page/topics/here-tiling-scheme.html
partitions: {
# HERE Tile zoom level of partitioned junction data.
zoomLevel: 10
# URI of the folder containing partitioned junction GeoJSON files.
folderUri: "s3://awskey:awssecret@some-bucket/path/to/junctions-zoom-10/?region=eu-west"
# Maximum number of junction points cached in memory per task slot.
# For optimal performance, set this to the total number of junctions in the partitioned dataset.
# Reduce this value if task manager memory is limited.
maxCacheSizeInPoints: 1000000
}
}Note
GeoJSON files used in Junction-based gapping must follow the same format as those used in POI proximity configuration.
Region and area configuration
Region and area configuration files are JSON files that comply with the GeoJSON standard.
HERE Anonymizer Self-Hosted requires the following format:
{
"type": "GeometryCollection",
"properties": {
"regionId": "unique-id-of-region"
},
"geometries": [
{
"type": "Polygon",
"coordinates": [[
[1.000, 1.010],
[1.006, 0.992],
[0.991, 1.003],
[1.000, 1.010]
]],
"userData": {
"areaId": "optional-unique-area-id
}
},
{
"type": "MultiPolygon",
"coordinates": [
[[
[3.000, 3.010],
[3.006, 2.992],
[2.991, 3.003],
[3.000, 3.010]
]],
[[
[2.000, 2.010],
[2.006, 1.992],
[1.991, 2.003],
[2.000, 2.010]
]]
]
}
]
}
The main GeoJSON type is GeometryCollection. A GeometryCollection is a collection of any GeoJSON geometries.
In this case it is limited to Polygon and MultiPolygon types only. It requires a properties section
with a unique regionId defined. The region ID must be unique among all region or area files per feature.
Both, Polygon and MultiPolygon can have an optional userData section with an areaId. If you don't
provide such area ID it will be generated internally. The area ID is used for logging purposes. Each configured
polygon is considered an individual area.
Note
You can verify GeoJSON files at https://geojson.io.
Country borders GeoJSON
The HERE Anonymizer Self-Hosted archive contains a directory with country border geometries GeoJSON files.
These files can be used to configure all region-specific features like region selection inclusion and region selection exclusion.
Each file represents a single country. The ISO 3166-1 alpha-3 codes of the countries are used as file names.
Files are grouped by region and stored in the dist/country-borders directory.
To ensure good performance in mapping and visualization tools, borders are simplified:
- Detailed regions - small islands, complex coastlines - minimal simplification applied to preserve accuracy.
- Straight borders or large countries with deserts, plains - higher level simplification applied to reduce file size and improve rendering speed.
This keeps the dataset lightweight while retaining essential geographic accuracy.
Density-aware anonymization
anonymization {
...
// Default anonymization parameters applied if density-aware anonymization
// is enabled, but no specific parameters are set for the current density level
// or area is undefined.
outputTraceDuration: {
min: 30
max: 60
}
gapDuration: {
min: 20
max: 40
}
startCut.publishAfter: "time > random[60..120] and (speed > 20 or proximity > 200)"
density: {
enabled: true
// If density-aware anonymization is enabled, you must provide at least one area URI
area: {
areaUris: [
"s3://some-bucket/some-areas.json",
"az+blob://some-container/some-areas.json",
"file://some-path/some-areas.json"
]
}
// Define density ranges based on the number of current traces (vehicles) in area.
ranges: {
medium: {
min: 10
max: 99
}
high: {
min: 100
}
}
// For each density range defined in the previous section,
// you can set specific anonymization parameters that will be applied
// in areas with the corresponding density level.
anonymizationParametersPerRange: {
// If parameters for a certain density range are not defined
// (like in the "medium" range, there is no outputTraceDuration and gapDuration), then
// the default parameters defined in the "anonymization" section
// will be applied for that density range.
medium: {
startCut.publishAfter: "time > random[30..60]"
}
high: {
outputTraceDuration: {
min: 120
max: 180
}
gapDuration: {
min: 10
max: 20
}
}
}
} // end of density
}By default, density-aware anonymization uses a 30-minute window size and a 5-minute recalculation frequency. You can configure these parameters by setting the following environment variables:
# Window size in minutes for calculating the density value in a certain area. Default value is 60
DENSITY_WINDOW_SIZE_MINUTES=60
# Frequency in minutes for updating density values. Default value is 30
DENSITY_RECALCULATION_FREQUENCY_MINUTES=30Alerts detection and routing configuration
The HERE Anonymizer supports two ways of configuring alerts detection and routing:
- Simple: one handling channel configured through environment variables.
- Advanced: multiple handling channels and alternative application configuration.
Simple configuration
To activate alerts detection and routing, you have to define three environment variables for the JobManager environment.
ALERT_ID
The ALERT_ID variable enables alert handling and is used as a suffix
for Anonymizer metrics.
Example: ALERT_ID=accidents.
ALERT_URI
The ALERT_URI variable defines the destination where detected non-anonymized
messages will be routed.
Example: rabbit://guest:guest@rabbit:5672/alert-crashes-queue.
ALERT_FILTER_EXPRESSION
The ALERT_FILTER_EXPRESSION variable defines the boolean expression to be applied to every incoming event for detecting if the message should be handled.
Supported arguments for event filtering are:
type: string argument of event typesubtype: string argument of event subtypead.*: string or numeric argument of any extended attribute, for examplead.oilTemp
Example expression:
type = 'crash' and (subtype ~ '(?i).*breakdown.*' or ad.oilTemp > 90)
For this expression, the event type is exactly 'crash' and one of the following conditions are met:
- The subtype string contains the 'breakdown' substring, ignoring letter case.
- The extended attribute 'oilTemp' has a value higher than 90.
ALERT_FILTER_URI
The ALERT_FILTER_URI variable is another way
(alternative to ALERT_FILTER_EXPRESSION) to define a filtering boolean expression.
You can mention the location URI of the file containing the expression.
URI examples:
s3://aws-id:aws-secret-key@some-bucket/some-expression.txt?region=eu-west-1az+blob://storage-account:storage-key@some-container/some-expression.txtfile://some-path/some-expression.txt
The expression file is a text file containing a valid boolean expression, for example:
type ~ '(?i).*breakdown.*' and subtype ~ 'critical.*' and (ad.oiltemp > 90 or crashFrontSeverity = 'severe' or crashDetected = 'true')
Advanced configuration
You can configure multiple alert handling channels by providing an alternative application configuration file in the HOCON format.
You have to create the app.conf file, mount it to the JobManager environment,
and mention this file in the JobManager environment variable:
FLINK_ENV_JAVA_OPTS="-Dconfig.file=/opt/app.conf":
This is an example of an application configuration file that provides two alert handling channels:
alert: [
{
id: "crash-all"
uri: ${?ALERT1_URI}
filter {
expression: "type = 'crash'"
}
}
{
id: "crash-special"
uri: ${?ALERT2_URI}
filter {
uri: ${?ALERT2_FILTER_URI}
}
}
]You can choose which data can be configured through environment variables
(like alert[0].uri or alert[1].filter.uri in the example above) and what
is hardcoded into the app.conf file (like alert[0].id or alert[0].filter.expression).
When using an application configuration file like the one provided as an example, configure the following environment variables:
Note
The example uses the Docker Compose file syntax for demonstration purposes. Configure variables accordingly to the selected deployment method.
# For Docker Compose file syntax:
jobmanager:
# ...
command: jobmanager-stream
environment:
FLINK_ENV_JAVA_OPTS: "-Dconfig.file=/opt/app.conf"
ALERT1_URI: "rabbit://guest:guest@rabbit:5672/alert-crashes-all-queue"
ALERT2_URI: "rabbit://guest:guest@rabbit:5672/alert-crashes-special-queue"
ALERT2_FILTER_URI: "s3://aws-id:aws-secret@my-configs/expression.txt?region=eu-somewhere"Boolean expression syntax
| Syntax rule | ✅ Correct example | ❌ Incorrect example |
|---|---|---|
| All tokens must be separated by spaces. | speed > 100 | speed>100 |
Group conditions by () don't require spaces. | time > 60 and (speed > 40 or proximity > 500) | |
Supported boolean operations are and and or | type != 'crash' | not ( type = 'crash' ) |
Supported numeric operations are <, <=, >, >=, =, != | ad.oilTemp > 90 and ad.oilTemp < 110 | ad.oilTemp ~ 100. |
Supported string operators are =, !=, ~. | type ~ '^[A].*' | type > 'A' |
| Numeric to string auto-conversion is supported. | for argument x=100 can be x = '100' | |
| String to numeric auto-conversion is supported if possible | for argument x="100" can be x > 100 | for argument x="abc" cannot be x = 100 |
| All argument names are case-sensitive and defined by usage context. | speed > 100 | Speed > 100 |
String values are Java regular expressions. Can be compared as case-insensitive by (?i). | type ~ '(?i).*breakdown.*' |
To learn more about advanced string comparison, see Java regexp specification.
Insights events generation
To enable insights events generation, add the following in the anonymization section of the anonymization.conf configuration file.
- Set the areas for which you want to generate insights using the
areaUrisproperty. - Decide which types of insights events should be generated by setting their
enabledvalue totrue. - Set the
INSIGHTS_URIenvironment variable to define the destination URI for routing generated insights events.
The following code is an example of configuration that enables insights events generation:
insights {
enabled: true
areaUris: [
"s3://my-bucket/areas.json?region=some_region&endpoint=some_endpoint",
"az+blob://my-container/areas.json?endpoint=some_endpoint",
]
traceStart: {
enabled: true # Enables trace start events generation, default is false
}
traceEnd: {
enabled: true # Enables trace end events generation, default is false
}
staypoint: {
enabled: true # Enables staypoint detected events generation, default is false
}
distanceBeforeStayPoint: {
enabled: true # Enables distance before events generation, default is false
}
distanceAfterStayPoint: {
enabled: true # Enables distance after events generation, default is false
}
traceDistance: {
enabled: true # Enables distance trip events generation, default is false
}
regularEvents: [
{
expression: "type = 'Crash'" # Enables regular events generation based on the provided expression, default is empty
atts: ["att1", "att2"] # List of extended attributes to be included in the generated events, default is empty
}
]
}Anonimization logging
To enable anonymization logging, set the following configuration properties in your application.conf file:
secureLog {
enabled = true
loggerName = "your-secure-logger-name"
prettify = true
}enabled: Set this totrueto enable anonymized data logging. Default isfalse.loggerName: The name of the logger to use in logging statements.prettify: Set totrueto format (prettify) the JSON content of the log for better readability. Default isfalse.
Note
Anonymization logs can contain sensitive information. Ensure compliance with your organization's data security policies and restrict access to the logs accordingly.
Anonymization logging can impact performance and increase log size. It's recommended to use this feature for debugging and monitoring and to disable it in the production environment unless necessary.
Log content
The following information is logged for all anonymization events:
- Timestamp of the event.
- Anonymization operation performed.
- Data affected by anonymization.
- Logger name (if passed in the configuration).
This is an example log (prettified):
11:37:00.247 [main] INFO test-secure-logger - {
"@timestamp" : "2025-09-19T11:37:00.247652+05:30",
"level" : "INFO",
"logger_name" : "test-secure-logger",
"thread" : "main",
"secureLogInfo" : {
"payloadType" : "POINT_DROPPED_ORIGIN",
"payloadTypeString" : null,
"reason" : "Dropped OD origin points partially.",
"payload" : [
{
"timestampMicro" : 1758262020208174,
"extendedAttributes" : { },
"coordinates" : {
"latitude" : 71.08342427608328,
"longitude" : 67.16120840580302,
"elevation" : 18.46694847896691
},
"speed" : {
"metersPerSecond" : 12.527777777777779,
"defined" : true,
"kmPerHour" : 45.1,
"undefined" : false,
"definedAndZero" : false
},
"heading" : 0.0
}
],
"additionalInfo" : {
"somekey" : "somevalue",
}
}
}Updated yesterday