@@ -57,31 +57,48 @@ func WithMasks(ctx context.Context, masks *[]string) context.Context {
57
57
return context .WithValue (ctx , masksContextKeyVal , masks )
58
58
}
59
59
60
+ type JobLoggerFactory interface {
61
+ WithJobLogger () * logrus.Logger
62
+ }
63
+
64
+ type jobLoggerFactoryContextKey string
65
+
66
+ var jobLoggerFactoryContextKeyVal = (jobLoggerFactoryContextKey )("jobloggerkey" )
67
+
68
+ func WithJobLoggerFactory (ctx context.Context , factory JobLoggerFactory ) context.Context {
69
+ return context .WithValue (ctx , jobLoggerFactoryContextKeyVal , factory )
70
+ }
71
+
60
72
// WithJobLogger attaches a new logger to context that is aware of steps
61
73
func WithJobLogger (ctx context.Context , jobID string , jobName string , config * Config , masks * []string , matrix map [string ]interface {}) context.Context {
62
- mux .Lock ()
63
- defer mux .Unlock ()
64
-
65
- var formatter logrus.Formatter
66
- if config .JSONLogger {
67
- formatter = & jobLogJSONFormatter {
68
- formatter : & logrus.JSONFormatter {},
69
- masker : valueMasker (config .InsecureSecrets , config .Secrets ),
70
- }
74
+ ctx = WithMasks (ctx , masks )
75
+
76
+ var logger * logrus.Logger
77
+ if jobLoggerFactory , ok := ctx .Value (jobLoggerFactoryContextKeyVal ).(JobLoggerFactory ); ok && jobLoggerFactory != nil {
78
+ logger = jobLoggerFactory .WithJobLogger ()
71
79
} else {
72
- formatter = & jobLogFormatter {
73
- color : colors [nextColor % len (colors )],
74
- masker : valueMasker (config .InsecureSecrets , config .Secrets ),
80
+ var formatter logrus.Formatter
81
+ if config .JSONLogger {
82
+ formatter = & logrus.JSONFormatter {}
83
+ } else {
84
+ mux .Lock ()
85
+ defer mux .Unlock ()
86
+ nextColor ++
87
+ formatter = & jobLogFormatter {
88
+ color : colors [nextColor % len (colors )],
89
+ }
75
90
}
76
- }
77
91
78
- nextColor ++
79
- ctx = WithMasks (ctx , masks )
92
+ logger = logrus .New ()
93
+ logger .SetOutput (os .Stdout )
94
+ logger .SetLevel (logrus .GetLevel ())
95
+ logger .SetFormatter (formatter )
96
+ }
80
97
81
- logger := logrus . New ()
82
- logger .SetFormatter ( formatter )
83
- logger . SetOutput ( os . Stdout )
84
- logger . SetLevel ( logrus . GetLevel () )
98
+ logger . SetFormatter ( & maskedFormatter {
99
+ Formatter : logger .Formatter ,
100
+ masker : valueMasker ( config . InsecureSecrets , config . Secrets ),
101
+ } )
85
102
rtn := logger .WithFields (logrus.Fields {
86
103
"job" : jobName ,
87
104
"jobID" : jobID ,
@@ -149,16 +166,22 @@ func valueMasker(insecureSecrets bool, secrets map[string]string) entryProcessor
149
166
}
150
167
}
151
168
152
- type jobLogFormatter struct {
153
- color int
169
+ type maskedFormatter struct {
170
+ logrus. Formatter
154
171
masker entryProcessor
155
172
}
156
173
174
+ func (f * maskedFormatter ) Format (entry * logrus.Entry ) ([]byte , error ) {
175
+ return f .Formatter .Format (f .masker (entry ))
176
+ }
177
+
178
+ type jobLogFormatter struct {
179
+ color int
180
+ }
181
+
157
182
func (f * jobLogFormatter ) Format (entry * logrus.Entry ) ([]byte , error ) {
158
183
b := & bytes.Buffer {}
159
184
160
- entry = f .masker (entry )
161
-
162
185
if f .isColored (entry ) {
163
186
f .printColored (b , entry )
164
187
} else {
@@ -225,12 +248,3 @@ func checkIfTerminal(w io.Writer) bool {
225
248
return false
226
249
}
227
250
}
228
-
229
- type jobLogJSONFormatter struct {
230
- masker entryProcessor
231
- formatter * logrus.JSONFormatter
232
- }
233
-
234
- func (f * jobLogJSONFormatter ) Format (entry * logrus.Entry ) ([]byte , error ) {
235
- return f .formatter .Format (f .masker (entry ))
236
- }
0 commit comments