| pkg/controller/bootstrap |
15 |
28 |
@mengjiao-liu, kubernetes/kubernetes#113464 |
| pkg/controller/certificates |
22 |
31 |
@mengjiao-liu, kubernetes/kubernetes#113994 |
| pkg/controller/clusterroleaggregation |
2 |
2 |
@mengjiao-liu, kubernetes/kubernetes#113910 |
| pkg/controller/cronjob |
1 |
44 |
@mengjiao-liu, kubernetes/kubernetes#113428 |
| pkg/controller/daemon |
45 |
85 |
@249043822, kubernetes/kubernetes#113622 |
| pkg/controller/deployment |
23 |
79 |
@249043822, kubernetes/kubernetes#113525 |
| pkg/controller/disruption |
29 |
56 |
@Namanl2001, kubernetes/kubernetes#116021 |
| pkg/controller/endpoint |
12 |
24 |
lunhuijie (Slack) |
| pkg/controller/endpointslice |
22 |
36 |
@Namanl2001, kubernetes/kubernetes#115295 |
| pkg/controller/endpointslicemirroring |
18 |
28 |
@Namanl2001, kubernetes/kubernetes#114982 |
| pkg/controller/garbagecollector |
55 |
105 |
@ncdc, kubernetes/kubernetes#113471 |
| pkg/controller/job |
12 |
36 |
was: @sanwishe, kubernetes/kubernetes#113576, now: @mengjiao-liu |
| pkg/controller/namespace |
30 |
55 |
@yangjunmyfm192085, kubernetes/kubernetes#113443 |
| pkg/controller/nodeipam |
135 |
210 |
@yangjunmyfm192085, kubernetes/kubernetes#112670 |
| pkg/controller/nodelifecycle |
60 |
106 |
@yangjunmyfm192085, kubernetes/kubernetes#112670 |
| pkg/controller/podautoscaler |
9 |
13 |
@freddie400, kubernetes/kubernetes#114687 |
| pkg/controller/podgc |
10 |
24 |
@pravarag, kubernetes/kubernetes#114689 |
| pkg/controller/replicaset |
20 |
49 |
@Namanl2001, kubernetes/kubernetes#114871 |
| pkg/controller/resourcequota |
24 |
37 |
@ncdc, kubernetes/kubernetes#113315 |
| pkg/controller/serviceaccount |
22 |
31 |
@Namanl2001, kubernetes/kubernetes#114918 |
| pkg/controller/statefulset |
19 |
59 |
@249043822, kubernetes/kubernetes#113840 |
| pkg/controller/storageversiongc |
4 |
6 |
@songxiao-wang87, kubernetes/kubernetes#113986 |
| pkg/controller/testutil |
9 |
9 |
@Octopusjust, kubernetes/kubernetes#114061 |
| pkg/controller/ttl |
4 |
8 |
wxs (Slack) = @songxiao-wang87, kubernetes/kubernetes#113916 |
| pkg/controller/ttlafterfinished |
9 |
15 |
@obaranov1, kubernetes/kubernetes#115332 |
| pkg/controller/util |
0 |
19 |
@fatsheep9146, kubernetes/kubernetes#115049 |
| pkg/controller/volume |
351 |
673 |
@yangjunmyfm192085, kubernetes/kubernetes#113584 |
| pkg/kubelet |
1 |
1805 |
@fmuyassarov |
| pkg/scheduler |
0 |
348 |
@knelasevero, kubernetes/kubernetes#111155 |
| staging/src/k8s.io/apiextensions-apiserver |
57 |
81 |
|
| staging/src/k8s.io/apimachinery |
73 |
114 |
@yanjing1104 |
| staging/src/k8s.io/apiserver |
262 |
543 |
|
| staging/src/k8s.io/client-go |
161 |
267 |
|
| staging/src/k8s.io/cloud-provider |
108 |
146 |
|
| staging/src/k8s.io/cluster-bootstrap |
2 |
4 |
|
| staging/src/k8s.io/code-generator |
108 |
168 |
|
| staging/src/k8s.io/component-base |
32 |
63 |
|
| staging/src/k8s.io/component-helpers |
7 |
8 |
|
| staging/src/k8s.io/controller-manager |
10 |
10 |
|
| staging/src/k8s.io/csi-translation-lib |
3 |
4 |
|
| staging/src/k8s.io/kube-aggregator |
52 |
76 |
|
| staging/src/k8s.io/kube-controller-manager |
0 |
0 |
|
| staging/src/k8s.io/kubectl |
89 |
147 |
@yanjing1104 |
| staging/src/k8s.io/legacy-cloud-providers |
1445 |
2238 |
|
| staging/src/k8s.io/mount-utils |
54 |
92 |
|
| staging/src/k8s.io/pod-security-admission |
1 |
34 |
@Namanl2001, kubernetes/kubernetes#114471 |
| staging/src/k8s.io/sample-controller |
16 |
22 |
@pchan, kubernetes/kubernetes#113879 |
Enhancement Description
One-line enhancement description (can be used as a release note): Contextual logging enables the caller of a function to control all aspects of logging (output formatting, verbosity, additional values and names).
Kubernetes Enhancement Proposal: https://github.com/kubernetes/enhancements/tree/master/keps/sig-instrumentation/3077-contextual-logging
Discussion Link: WG Structured Logging
Primary contact (assignee): @pohly
Responsible SIGs: SIG Instrumentation, WG Structured Logging
Enhancement target (which target equals to which milestone):
Alpha
k/enhancements) update PR(s):k/k) update PR(s):k/website) update PR(s):Beta
k/enhancements) update PR(s):k/k) update PR(s):k/website) update(s): contextual logging: beta in Kubernetes 1.30 website#45288[] Beta (1.35)
k/enhancements) update PR(s): KEP-1602, KEP-3077: structured, contextual logging in 1.35 #5621k/k) update PR(s)]:k/website) update(s): noneCurrent configuration
https://github.com/kubernetes/kubernetes/blob/master/hack/logcheck.conf
Status
The following table counts log calls that need to be converted. The numbers for contextual logging include those for structured logging.
At this point, controllers could get converted to contextual logging or one of the components that was already converted to structured logging. If you want to pick one, ping @pohly on the #wg-structured-logging Slack channel. See structured and contextual logging migration instructions for guidance.
Besides migrating log calls, we also might have to migrate from APIs which don't support contextual logging to APIs which do:
From 2022-10-27 ~= Kubernetes 1.26
The focus was on converting kube-controller-manager. Of 1944 unstructured and/or non-contexual logging calls in
pkg/controllerandcmd/kube-controller-manager, 82% were converted to structured, contextual logging in Kubernetes 1.27.Details
From 2023-03-17 = Kubernetes v1.27.0-beta.0
All of kube-controller-manager got converted.
Details
Tables created with:
@obaranov1, kubernetes/kubernetes#116021, @mengjiao-liu, kubernetes/kubernetes#119147@pravarag, kubernetes/kubernetes#114689, @pohly, kubernetes/kubernetes#119250From 2023-09-18 =~ Kubernetes v1.28
Details
Table created manually and with:
From 2023-11-20 =~ Kubernetes v1.29
Details
Table created with:
From 2025-08-26 = Kubernetes v1.34.0-rc.2
Details
Done (summary, see logcheck.conf for details):
Table created with:
Note that the table ignores logcheck suppressions (= calls where it was decided to not convert them).
From 2026-01-20 = v1.36.0-alpha.0-744-ge3684b7eb2b
Done (summary, see logcheck.conf for details):
Table created with:
Note that the table ignores logcheck suppressions (= calls where it was decided to not convert them).