@@ -17,9 +17,13 @@ limitations under the License.
17
17
package logs
18
18
19
19
import (
20
+ "flag"
20
21
"fmt"
22
+ "strings"
23
+
21
24
"github.com/go-logr/logr"
22
25
"github.com/spf13/pflag"
26
+
23
27
"k8s.io/klog/v2"
24
28
)
25
29
@@ -28,6 +32,12 @@ const (
28
32
defaultLogFormat = "text"
29
33
)
30
34
35
+ // List of logs (k8s.io/klog + k8s.io/component-base/logs) flags supported by all logging formats
36
+ var supportedLogsFlags = map [string ]struct {}{
37
+ "v" : {},
38
+ "vmodule" : {},
39
+ }
40
+
31
41
// Options has klog format parameters
32
42
type Options struct {
33
43
LogFormat string
@@ -50,7 +60,9 @@ func (o *Options) Validate() []error {
50
60
51
61
// AddFlags add logging-format flag
52
62
func (o * Options ) AddFlags (fs * pflag.FlagSet ) {
53
- fs .StringVar (& o .LogFormat , logFormatFlagName , defaultLogFormat , "Set log format" )
63
+ unsupportedFlags := fmt .Sprintf ("--%s" , strings .Join (unsupportedLoggingFlags (), ", --" ))
64
+ formats := fmt .Sprintf (`"%s"` , strings .Join (logRegistry .List (), `", "` ))
65
+ fs .StringVar (& o .LogFormat , logFormatFlagName , defaultLogFormat , fmt .Sprintf ("Set format of logs written by component. Options: %s. Non default formats don't support klog flags like: %s." , formats , unsupportedFlags ))
54
66
}
55
67
56
68
// Apply set klog logger from LogFormat type
@@ -65,3 +77,26 @@ func (o *Options) Apply() {
65
77
func (o * Options ) Get () (logr.Logger , error ) {
66
78
return logRegistry .Get (o .LogFormat )
67
79
}
80
+
81
+ func unsupportedLoggingFlags () []string {
82
+ allFlags := []string {}
83
+
84
+ // k8s.io/klog flags
85
+ fs := & flag.FlagSet {}
86
+ klog .InitFlags (fs )
87
+ fs .VisitAll (func (flag * flag.Flag ) {
88
+ if _ , found := supportedLogsFlags [flag .Name ]; ! found {
89
+ allFlags = append (allFlags , flag .Name )
90
+ }
91
+ })
92
+
93
+ // k8s.io/component-base/logs flags
94
+ pfs := & pflag.FlagSet {}
95
+ AddFlags (pfs )
96
+ pfs .VisitAll (func (flag * pflag.Flag ) {
97
+ if _ , found := supportedLogsFlags [flag .Name ]; ! found {
98
+ allFlags = append (allFlags , flag .Name )
99
+ }
100
+ })
101
+ return allFlags
102
+ }
0 commit comments