Skip to content

Commit cb23743

Browse files
committed
Strip glog from the event recorder
The event recorded was using glog to log, which it should not have been. Plus, the event information is inherently structured, so it's a win to provide structured logging of the event. We probably want to have the recorder have a unique logger per controller (or consumer in general) -- right now, it's just using the glog manager logger.
1 parent 9f64e28 commit cb23743

File tree

4 files changed

+20
-10
lines changed

4 files changed

+20
-10
lines changed

pkg/internal/recorder/recorder.go

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ package recorder
1919
import (
2020
"fmt"
2121

22-
"github.com/golang/glog"
22+
"github.com/go-logr/logr"
2323
corev1 "k8s.io/api/core/v1"
2424
"k8s.io/apimachinery/pkg/runtime"
2525
"k8s.io/client-go/kubernetes"
@@ -34,19 +34,24 @@ type provider struct {
3434
scheme *runtime.Scheme
3535
// eventBroadcaster to create new recorder instance
3636
eventBroadcaster record.EventBroadcaster
37+
// logger is the logger to use when logging diagnostic event info
38+
logger logr.Logger
3739
}
3840

3941
// NewProvider create a new Provider instance.
40-
func NewProvider(config *rest.Config, scheme *runtime.Scheme) (recorder.Provider, error) {
42+
func NewProvider(config *rest.Config, scheme *runtime.Scheme, logger logr.Logger) (recorder.Provider, error) {
4143
clientSet, err := kubernetes.NewForConfig(config)
4244
if err != nil {
4345
return nil, fmt.Errorf("failed to init clientSet: %v", err)
4446
}
4547

46-
p := &provider{scheme: scheme}
48+
p := &provider{scheme: scheme, logger: logger}
4749
p.eventBroadcaster = record.NewBroadcaster()
48-
p.eventBroadcaster.StartLogging(glog.Infof)
4950
p.eventBroadcaster.StartRecordingToSink(&typedcorev1.EventSinkImpl{Interface: clientSet.CoreV1().Events("")})
51+
p.eventBroadcaster.StartEventWatcher(
52+
func(e *corev1.Event) {
53+
p.logger.V(1).Info(e.Type, "object", e.InvolvedObject, "reason", e.Reason, "message", e.Message)
54+
})
5055

5156
return p, nil
5257
}

pkg/internal/recorder/recorder_test.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
package recorder_test
1818

1919
import (
20+
tlog "github.com/go-logr/logr/testing"
2021
. "github.com/onsi/ginkgo"
2122
. "github.com/onsi/gomega"
2223
"k8s.io/client-go/kubernetes/scheme"
@@ -26,7 +27,7 @@ import (
2627
var _ = Describe("recorder.Provider", func() {
2728
Describe("NewProvider", func() {
2829
It("should return a provider instance and a nil error.", func() {
29-
provider, err := recorder.NewProvider(cfg, scheme.Scheme)
30+
provider, err := recorder.NewProvider(cfg, scheme.Scheme, tlog.NullLogger{})
3031
Expect(provider).NotTo(BeNil())
3132
Expect(err).NotTo(HaveOccurred())
3233
})
@@ -35,13 +36,13 @@ var _ = Describe("recorder.Provider", func() {
3536
// Invalid the config
3637
cfg1 := *cfg
3738
cfg1.ContentType = "invalid-type"
38-
_, err := recorder.NewProvider(&cfg1, scheme.Scheme)
39+
_, err := recorder.NewProvider(&cfg1, scheme.Scheme, tlog.NullLogger{})
3940
Expect(err.Error()).To(ContainSubstring("failed to init clientSet"))
4041
})
4142
})
4243
Describe("GetEventRecorder", func() {
4344
It("should return a recorder instance.", func() {
44-
provider, err := recorder.NewProvider(cfg, scheme.Scheme)
45+
provider, err := recorder.NewProvider(cfg, scheme.Scheme, tlog.NullLogger{})
4546
Expect(err).NotTo(HaveOccurred())
4647

4748
recorder := provider.GetEventRecorderFor("test")

pkg/manager/manager.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import (
2020
"fmt"
2121
"time"
2222

23+
"github.com/go-logr/logr"
2324
"k8s.io/apimachinery/pkg/api/meta"
2425
"k8s.io/apimachinery/pkg/runtime"
2526
"k8s.io/client-go/kubernetes/scheme"
@@ -85,7 +86,7 @@ type Options struct {
8586
// Dependency injection for testing
8687
newCache func(config *rest.Config, opts cache.Options) (cache.Cache, error)
8788
newClient func(config *rest.Config, options client.Options) (client.Client, error)
88-
newRecorderProvider func(config *rest.Config, scheme *runtime.Scheme) (recorder.Provider, error)
89+
newRecorderProvider func(config *rest.Config, scheme *runtime.Scheme, logger logr.Logger) (recorder.Provider, error)
8990
}
9091

9192
// Runnable allows a component to be started.
@@ -132,7 +133,9 @@ func New(config *rest.Config, options Options) (Manager, error) {
132133
return nil, err
133134
}
134135
// Create the recorder provider to inject event recorders for the components.
135-
recorderProvider, err := options.newRecorderProvider(config, options.Scheme)
136+
// TODO(directxman12): the log for the event provider should have a context (name, tags, etc) specific
137+
// to the particular controller that it's being injected into, rather than a generic one like is here.
138+
recorderProvider, err := options.newRecorderProvider(config, options.Scheme, log.WithName("events"))
136139
if err != nil {
137140
return nil, err
138141
}

pkg/manager/manager_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package manager
1919
import (
2020
"fmt"
2121

22+
"github.com/go-logr/logr"
2223
. "github.com/onsi/ginkgo"
2324
. "github.com/onsi/gomega"
2425
"k8s.io/apimachinery/pkg/api/meta"
@@ -86,7 +87,7 @@ var _ = Describe("manger.Manager", func() {
8687
})
8788
It("should return an error it can't create a recorder.Provider", func(done Done) {
8889
m, err := New(cfg, Options{
89-
newRecorderProvider: func(config *rest.Config, scheme *runtime.Scheme) (recorder.Provider, error) {
90+
newRecorderProvider: func(config *rest.Config, scheme *runtime.Scheme, logger logr.Logger) (recorder.Provider, error) {
9091
return nil, fmt.Errorf("expected error")
9192
}})
9293
Expect(m).To(BeNil())

0 commit comments

Comments
 (0)