...
1
16
17
18
19
20
21
22 package framework
23
24 import (
25 "flag"
26 "fmt"
27 "os"
28 "strings"
29 "time"
30
31 "github.com/onsi/ginkgo/v2"
32 ginkgotypes "github.com/onsi/ginkgo/v2/types"
33
34 "k8s.io/klog/v2"
35 "k8s.io/klog/v2/textlogger"
36
37 _ "k8s.io/component-base/logs/testinit"
38 )
39
40 var (
41 logConfig = textlogger.NewConfig(
42 textlogger.Output(ginkgo.GinkgoWriter),
43 textlogger.Backtrace(unwind),
44 )
45 ginkgoLogger = textlogger.NewLogger(logConfig)
46 TimeNow = time.Now
47 Pid = os.Getpid()
48 )
49
50 func init() {
51
52
53
54
55
56 var fs flag.FlagSet
57 logConfig.AddFlags(&fs)
58 fs.VisitAll(func(loggerFlag *flag.Flag) {
59 klogFlag := flag.CommandLine.Lookup(loggerFlag.Name)
60 if klogFlag != nil {
61 klogFlag.Value = &valueChain{Value: loggerFlag.Value, parentValue: klogFlag.Value}
62 }
63 })
64
65
66
67
68
69
70
71
72 writer, _ := ginkgoLogger.GetSink().(textlogger.KlogBufferWriter)
73 opts := []klog.LoggerOption{
74 klog.ContextualLogger(true),
75 klog.WriteKlogBuffer(writer.WriteKlogBuffer),
76 }
77 klog.SetLoggerWithOptions(ginkgoLogger, opts...)
78 }
79
80 type valueChain struct {
81 flag.Value
82 parentValue flag.Value
83 }
84
85 func (v *valueChain) Set(value string) error {
86 if err := v.Value.Set(value); err != nil {
87 return err
88 }
89 if err := v.parentValue.Set(value); err != nil {
90 return err
91 }
92 return nil
93 }
94
95 func unwind(skip int) (string, int) {
96 location := ginkgotypes.NewCodeLocation(skip + 1)
97 return location.FileName, location.LineNumber
98 }
99
100
101
102 func log(offset int, msg string) {
103 now := TimeNow()
104 file, line := unwind(offset + 1)
105 if file == "" {
106 file = "???"
107 line = 1
108 } else if slash := strings.LastIndex(file, "/"); slash >= 0 {
109 file = file[slash+1:]
110 }
111 _, month, day := now.Date()
112 hour, minute, second := now.Clock()
113 header := fmt.Sprintf("I%02d%02d %02d:%02d:%02d.%06d %d %s:%d]",
114 month, day, hour, minute, second, now.Nanosecond()/1000, Pid, file, line)
115
116 fmt.Fprintln(ginkgo.GinkgoWriter, header, msg)
117 }
118
View as plain text