@@ -3,11 +3,13 @@ package controllers
3
3
import (
4
4
"os"
5
5
6
+ "github.com/go-logr/logr"
6
7
rayv1 "github.com/ray-project/kuberay/ray-operator/apis/ray/v1"
7
8
8
9
corev1 "k8s.io/api/core/v1"
9
10
networkingv1 "k8s.io/api/networking/v1"
10
11
"k8s.io/apimachinery/pkg/api/equality"
12
+ "k8s.io/apimachinery/pkg/api/errors"
11
13
"k8s.io/apimachinery/pkg/util/intstr"
12
14
"k8s.io/apimachinery/pkg/util/validation/field"
13
15
v1 "k8s.io/client-go/applyconfigurations/meta/v1"
@@ -172,3 +174,41 @@ func withEnvVarName(name string) compare[corev1.EnvVar] {
172
174
return e1 .Name == name
173
175
}
174
176
}
177
+
178
+ // logSink implements a log sink with an error log filter
179
+ type logSink struct {
180
+ sink logr.LogSink
181
+ }
182
+
183
+ func (l logSink ) Init (info logr.RuntimeInfo ) {
184
+ l .sink .Init (info )
185
+ }
186
+
187
+ func (l logSink ) Enabled (level int ) bool {
188
+ return l .sink .Enabled (level )
189
+ }
190
+ func (l logSink ) Info (level int , msg string , keysAndValues ... any ) {
191
+ l .sink .Info (level , msg , keysAndValues ... )
192
+ }
193
+
194
+ func (l logSink ) Error (err error , msg string , keysAndValues ... any ) {
195
+ // downgrade StatusReasonConflict errors to debug messages
196
+ if errors .IsConflict (err ) {
197
+ l .sink .Info (1 , msg , append (keysAndValues , "error" , err .Error ())... )
198
+ } else {
199
+ l .sink .Error (err , msg , keysAndValues ... )
200
+ }
201
+ }
202
+
203
+ func (l logSink ) WithValues (keysAndValues ... any ) logr.LogSink {
204
+ return logSink {l .sink .WithValues (keysAndValues ... )}
205
+ }
206
+
207
+ func (l logSink ) WithName (name string ) logr.LogSink {
208
+ return logSink {l .sink .WithName (name )}
209
+ }
210
+
211
+ // FilteredLogger returns a copy of the logger with an error log filter
212
+ func FilteredLogger (logger logr.Logger ) logr.Logger {
213
+ return logger .WithSink (logSink {logger .GetSink ()})
214
+ }
0 commit comments