@@ -11,10 +11,6 @@ import (
11
11
"go.opentelemetry.io/otel/log/embedded"
12
12
)
13
13
14
- // embeddedLogger is a type alias so the embedded.Logger type doesn't conflict
15
- // with the Logger method of the Recorder when it is embedded.
16
- type embeddedLogger = embedded.Logger // nolint:unused // Used below.
17
-
18
14
type enabledFn func (context.Context , log.Record ) bool
19
15
20
16
var defaultEnabledFunc = func (context.Context , log.Record ) bool {
@@ -57,11 +53,8 @@ func WithEnabledFunc(fn func(context.Context, log.Record) bool) Option {
57
53
func NewRecorder (options ... Option ) * Recorder {
58
54
cfg := newConfig (options )
59
55
60
- sr := & ScopeRecords {}
61
-
62
56
return & Recorder {
63
- currentScopeRecord : sr ,
64
- enabledFn : cfg .enabledFn ,
57
+ enabledFn : cfg .enabledFn ,
65
58
}
66
59
}
67
60
@@ -82,12 +75,9 @@ type ScopeRecords struct {
82
75
// in-memory.
83
76
type Recorder struct {
84
77
embedded.LoggerProvider
85
- embeddedLogger // nolint:unused // Used to embed embedded.Logger.
86
-
87
- mu sync.Mutex
88
78
89
- loggers [] * Recorder
90
- currentScopeRecord * ScopeRecords
79
+ mu sync. Mutex
80
+ loggers [] * logger
91
81
92
82
// enabledFn decides whether the recorder should enable logging of a record or not
93
83
enabledFn enabledFn
@@ -98,41 +88,24 @@ type Recorder struct {
98
88
func (r * Recorder ) Logger (name string , opts ... log.LoggerOption ) log.Logger {
99
89
cfg := log .NewLoggerConfig (opts ... )
100
90
101
- nr := & Recorder {
102
- currentScopeRecord : & ScopeRecords {
91
+ nl := & logger {
92
+ scopeRecord : & ScopeRecords {
103
93
Name : name ,
104
94
Version : cfg .InstrumentationVersion (),
105
95
SchemaURL : cfg .SchemaURL (),
106
96
},
107
97
enabledFn : r .enabledFn ,
108
98
}
109
- r .addChildLogger (nr )
110
-
111
- return nr
112
- }
113
-
114
- func (r * Recorder ) addChildLogger (nr * Recorder ) {
115
- r .mu .Lock ()
116
- defer r .mu .Unlock ()
117
-
118
- r .loggers = append (r .loggers , nr )
119
- }
120
-
121
- // Enabled indicates whether a specific record should be stored.
122
- func (r * Recorder ) Enabled (ctx context.Context , record log.Record ) bool {
123
- if r .enabledFn == nil {
124
- return defaultEnabledFunc (ctx , record )
125
- }
99
+ r .addChildLogger (nl )
126
100
127
- return r . enabledFn ( ctx , record )
101
+ return nl
128
102
}
129
103
130
- // Emit stores the log record.
131
- func (r * Recorder ) Emit (_ context.Context , record log.Record ) {
104
+ func (r * Recorder ) addChildLogger (nl * logger ) {
132
105
r .mu .Lock ()
133
106
defer r .mu .Unlock ()
134
107
135
- r .currentScopeRecord . Records = append (r .currentScopeRecord . Records , record )
108
+ r .loggers = append (r .loggers , nl )
136
109
}
137
110
138
111
// Result returns the current in-memory recorder log records.
@@ -141,22 +114,53 @@ func (r *Recorder) Result() []*ScopeRecords {
141
114
defer r .mu .Unlock ()
142
115
143
116
ret := []* ScopeRecords {}
144
- ret = append (ret , r .currentScopeRecord )
145
117
for _ , l := range r .loggers {
146
- ret = append (ret , l .Result () ... )
118
+ ret = append (ret , l .scopeRecord )
147
119
}
148
120
return ret
149
121
}
150
122
151
- // Reset clears the in-memory log records.
123
+ // Reset clears the in-memory log records for all loggers .
152
124
func (r * Recorder ) Reset () {
153
125
r .mu .Lock ()
154
126
defer r .mu .Unlock ()
155
127
156
- if r .currentScopeRecord != nil {
157
- r .currentScopeRecord .Records = nil
158
- }
159
128
for _ , l := range r .loggers {
160
129
l .Reset ()
161
130
}
162
131
}
132
+
133
+ type logger struct {
134
+ embedded.Logger
135
+
136
+ mu sync.Mutex
137
+ scopeRecord * ScopeRecords
138
+
139
+ // enabledFn decides whether the recorder should enable logging of a record or not.
140
+ enabledFn enabledFn
141
+ }
142
+
143
+ // Enabled indicates whether a specific record should be stored.
144
+ func (l * logger ) Enabled (ctx context.Context , record log.Record ) bool {
145
+ if l .enabledFn == nil {
146
+ return defaultEnabledFunc (ctx , record )
147
+ }
148
+
149
+ return l .enabledFn (ctx , record )
150
+ }
151
+
152
+ // Emit stores the log record.
153
+ func (l * logger ) Emit (_ context.Context , record log.Record ) {
154
+ l .mu .Lock ()
155
+ defer l .mu .Unlock ()
156
+
157
+ l .scopeRecord .Records = append (l .scopeRecord .Records , record )
158
+ }
159
+
160
+ // Reset clears the in-memory log records.
161
+ func (l * logger ) Reset () {
162
+ l .mu .Lock ()
163
+ defer l .mu .Unlock ()
164
+
165
+ l .scopeRecord .Records = nil
166
+ }
0 commit comments