Logging field standardisation - Customer-paced migration via admin panel setting
## Description
As part of the [logging field standardisation](https://gitlab.com/groups/gitlab-com/gl-infra/-/work_items/1432), ~"group::development tooling" is implementing a strategy to rename and standardize logging fields across GitLab services. The goal is to move forward quickly for GitLab.com to help internal engineers while minimizing overhead and difficulties for self-managed and dedicated customers.
## Background
Following the [decisions made on 2026-04-10](https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/work_items/4349#note_3239668711), the team agreed on a phased approach:
- **Admin panel setting**: Introduce an admin panel setting that allows customers (internal and external) to control which version of logging field names is emitted — old only (default), dual-emit (old + new), or new only. This enables a paced migration for customers while letting GitLab.com move forward independently.
- **Initial focus on high-impact fields**: Rather than tackling all fields at once, focus first on logging fields with the highest usage and impact. Lower-impact fields will be handled through a breaking change exception request.
- **Service-level consumption**: The setting must be consumed at boot by service runtimes to avoid adding per-log checks that would degrade logging speed.
## Strategy and phases
1. **Identify and document high-impact logging fields** — Determine which logging fields to focus on initially, based on usage and impact.
2. **Create the admin panel setting** — Build the setting that controls the logging field naming version.
3. **Define the SSOT for included fields** — Establish a single source of truth in labkit-spec for which fields are controlled by the setting.
4. **Enable services to consume the setting** — Implement a mechanism for services to read the setting at boot and adjust logging accordingly, with benchmarks to ensure no performance regression.
5. **Document expected changes** — Collect and map current vs. new field names per service, and coordinate with affected teams (e.g., Security).
6. **Execute internal migration** — Migrate GitLab.com to the new field names using the admin panel setting.
7. **Create migration guide and roll out to customers** — Produce a clear migration guide with steps, support contact, and deadlines, then communicate to customers in collaboration with customer support.
## Key constraints
- The cost of dual-emitting grows quickly at thousands of requests per second — minimize the dual-emit window.
- Logging speed must not be impacted; setting consumption happens at boot, not per-log.
- Niche/low-impact fields go through a breaking change exception request, not the admin panel setting.
## Related
- Parent epic: [Standardize logging fields across all index patterns for GitLab.com](https://gitlab.com/groups/gitlab-com/gl-infra/-/epics/1432)
- Decision log: [team-tasks#4349 (note)](https://gitlab.com/gitlab-org/quality/quality-engineering/team-tasks/-/work_items/4349#note_3239668711)
- Meeting recording: https://www.youtube.com/watch?v=HXCKAu0JGWg
### Status
<!-- STATUS NOTE START -->
## Status 2026-07-09
Most of the groundwork for the migration is set.
:clock1: **total hours spent this week by all contributors**: 22
:tada: **achievements**:
- The frontend changes for the admin panel setting are waiting for maintainer approval: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/243667
- The [LabKit extension](https://gitlab.com/gitlab-org/labkit/-/merge_requests/496) is merged. With this in place, we can start setting up services one by one to consume the related application setting to kickstart the migration to standard fields internally.
:arrow_forward: **next**:
- Kickstart the migration internally. This will involve several internal parties that consume the logs and orchestrate GitLab.
- With the results of the internal migration, we can create a customer journey with the help of customer support.
_Copied from https://gitlab.com/groups/gitlab-org/quality/-/epics/398#note_3539098122_
<!-- STATUS NOTE END -->
epic