Skip to main content
Version: Next

Logging

Event Logging

Superset by default logs special action events in its internal database (DBEventLogger). These logs can be accessed on the UI by navigating to Security > Action Log. You can freely customize these logs by implementing your own event log class. When custom log class is enabled DBEventLogger is disabled and logs stop being populated in UI logs view. To achieve both, custom log class should extend built-in DBEventLogger log class.

Here's an example of a simple JSON-to-stdout class:

    def log(self, user_id, action, *args, **kwargs):
records = kwargs.get('records', list())
dashboard_id = kwargs.get('dashboard_id')
slice_id = kwargs.get('slice_id')
duration_ms = kwargs.get('duration_ms')
referrer = kwargs.get('referrer')

for record in records:
log = dict(
action=action,
json=record,
dashboard_id=dashboard_id,
slice_id=slice_id,
duration_ms=duration_ms,
referrer=referrer,
user_id=user_id
)
print(json.dumps(log))

End by updating your config to pass in an instance of the logger you want to use:

EVENT_LOGGER = JSONStdOutEventLogger()

StatsD Logging

Superset can be configured to log events to StatsD if desired. Most endpoints hit are logged as well as key events like query start and end in SQL Lab.

To setup StatsD logging, it’s a matter of configuring the logger in your superset_config.py. If not already present, you need to ensure that the statsd-package is installed in Superset's python environment.

from superset.stats_logger import StatsdStatsLogger
STATS_LOGGER = StatsdStatsLogger(host='localhost', port=8125, prefix='superset')

Note that it's also possible to implement your own logger by deriving superset.stats_logger.BaseStatsLogger.

Chart Data Timing Metrics

When STATS_LOGGER is configured, Superset emits per-phase timing metrics for each /api/v1/chart/data request:

MetricDescription
chart_data.validate_msQuery object validation time
chart_data.cache_lookup_msCache lookup time
chart_data.db_execution_msDatabase query execution time (cache miss only)
chart_data.result_processing_msResult processing and serialization time
chart_data.total_msTotal request time

These metrics are also included in the API response under the timing key.

Slow Query Logging

To log slow chart queries, set CHART_DATA_SLOW_QUERY_THRESHOLD_MS in your superset_config.py:

# Log WARNING when chart queries exceed 5 seconds
CHART_DATA_SLOW_QUERY_THRESHOLD_MS = 5000

When a query exceeds the threshold, a WARNING log is emitted with a full timing breakdown:

WARNING: Slow chart query: total=6200ms validate=5ms cache_lookup=10ms db_execution=6000ms result_processing=185ms is_cached=False

Set to None (default) to disable slow query logging.