Skip to content

Commit 880ac84

Browse files
lvan100lianghuan
authored andcommitted
111
1 parent 6eb4f11 commit 880ac84

File tree

1 file changed

+26
-27
lines changed

1 file changed

+26
-27
lines changed

plugin_logger.go

Lines changed: 26 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,8 @@ type Logger interface {
4242
GetLevel() LevelRange
4343
}
4444

45-
// AppenderRef represents a reference to an appender by name.
46-
// The actual Appender is resolved and injected later during configuration.
45+
// AppenderRef represents a reference to an Appender by name.
46+
// The actual Appender is resolved and injected during configuration.
4747
type AppenderRef struct {
4848
Appender
4949
Ref string `PluginAttribute:"ref"`
@@ -64,10 +64,10 @@ func (c *AppenderRef) Write(b []byte) {
6464

6565
// LoggerBase contains fields shared by all logger configurations.
6666
type LoggerBase struct {
67-
Name string `PluginAttribute:"name"` // Logger name
68-
Tags string `PluginAttribute:"tags,default="` // Optional tags
69-
Level LevelRange `PluginAttribute:"level,default="`
70-
Layout Layout `PluginElement:"Layout?"`
67+
Name string `PluginAttribute:"name"` // Logger name
68+
Tags string `PluginAttribute:"tags,default="` // Optional tags
69+
Level LevelRange `PluginAttribute:"level,default="` // Logger level range
70+
Layout Layout `PluginElement:"Layout?"` // Layout for formatting logs
7171
}
7272

7373
// GetName returns the name of the logger.
@@ -94,48 +94,55 @@ var (
9494
_ Logger = (*RollingFileLogger)(nil)
9595
)
9696

97+
// DiscardLogger ignores all log events (no-op).
9798
type DiscardLogger struct {
9899
LoggerBase
99100
DiscardAppender
100101
}
101102

103+
// ConsoleLogger writes log events to standard output.
102104
type ConsoleLogger struct {
103105
LoggerBase
104106
ConsoleAppender
105107
}
106108

109+
// Append sends the event to the console if the level is enabled.
107110
func (c *ConsoleLogger) Append(e *Event) {
108111
if c.Level.Enable(e.Level) {
109112
c.ConsoleAppender.Append(e)
110113
}
111114
}
112115

116+
// FileLogger writes log events to a file.
113117
type FileLogger struct {
114118
LoggerBase
115119
FileAppender
116120
}
117121

122+
// Append writes the event to the file if the level is enabled.
118123
func (c *FileLogger) Append(e *Event) {
119124
if c.Level.Enable(e.Level) {
120125
c.FileAppender.Append(e)
121126
}
122127
}
123128

124-
// AppenderRefs represents a group of appenders.
129+
// AppenderRefs represents a collection of AppenderRef objects.
125130
type AppenderRefs struct {
126131
AppenderRefs []*AppenderRef `PluginElement:"AppenderRef"`
127132
}
128133

129-
// sortByLevel sorts appender references by level.
134+
// sortByLevel sorts appender references by minimum level,
135+
// and adjusts MaxLevel for chained ranges.
130136
func (c *AppenderRefs) sortByLevel() {
131137

132-
// Sort appender references by level
138+
// Sort appender references by MinLevel
133139
sort.Slice(c.AppenderRefs, func(i, j int) bool {
134140
iCode := c.AppenderRefs[i].Level.MinLevel.code
135141
jCode := c.AppenderRefs[j].Level.MinLevel.code
136142
return iCode < jCode
137143
})
138144

145+
// Adjust MaxLevel to match the next appender's MinLevel if needed
139146
for i := len(c.AppenderRefs) - 1; i >= 1; i-- {
140147
if c.AppenderRefs[i-1].Level.MaxLevel == MaxLevel {
141148
c.AppenderRefs[i-1].Level.MaxLevel = c.AppenderRefs[i].Level.MinLevel
@@ -232,7 +239,7 @@ func (c *AsyncLogger) GetDiscardCounter() int64 {
232239
return atomic.LoadInt64(&c.discardCounter)
233240
}
234241

235-
// Start initializes channels and launches the worker goroutine.
242+
// Start initializes the AsyncLogger and launches the worker goroutine.
236243
func (c *AsyncLogger) Start() error {
237244
if c.BufferSize < 100 {
238245
return util.FormatError(nil, "bufferSize is too small")
@@ -315,10 +322,8 @@ func (c *AsyncLogger) onBufferFull(v any) {
315322
}
316323
}
317324
case BufferFullPolicyBlock:
318-
// Block until space is available
319-
c.buf <- v
325+
c.buf <- v // Block until space is available
320326
case BufferFullPolicyDiscard:
321-
// Discard new item
322327
atomic.AddInt64(&c.discardCounter, 1)
323328
if e, ok := v.(*Event); ok {
324329
PutEvent(e)
@@ -329,17 +334,13 @@ func (c *AsyncLogger) onBufferFull(v any) {
329334
}
330335

331336
// Stop gracefully shuts down the async logger.
332-
// It signals the worker goroutine to exit and waits for it.
333-
// NOTE: Stop must be called only once, otherwise panic may occur.
334337
func (c *AsyncLogger) Stop() {
335338
c.buf <- c.stop
336339
<-c.wait
337340
close(c.buf)
338341
}
339342

340-
// RollingFileLogger is a logger implementation that writes log events to files.
341-
// It can work in either synchronous or asynchronous mode depending on AsyncWrite.
342-
// It also supports splitting warning/error logs into a separate file.
343+
// RollingFileLogger writes log events to files with optional rotation, separation, and async behavior.
343344
type RollingFileLogger struct {
344345
LoggerBase
345346
logger Logger
@@ -352,21 +353,19 @@ type RollingFileLogger struct {
352353
// If true, warning/error logs go to a separate .wf file.
353354
Separate bool `PluginAttribute:"separate,default=false"`
354355

355-
// rotation and cleanup configuration
356+
// Rotation and retention
356357
Rotation TimeRotation `PluginAttribute:"rotation"`
357358
MaxAge int32 `PluginAttribute:"maxAge,default=168"`
358359

359-
// asynchronous logging configuration
360+
// Async logging options
360361
AsyncWrite bool `PluginAttribute:"async,default=false"`
361362
BufferSize int `PluginAttribute:"bufferSize,default=10000"`
362363
BufferFullPolicy BufferFullPolicy `PluginAttribute:"bufferFullPolicy,default=Discard"`
363364
}
364365

365-
// Start initializes the FileLogger according to AsyncWrite flag
366-
// and then starts the underlying logger and its appenders.
366+
// Start initializes the RollingFileLogger, either synchronous or asynchronous.
367367
func (f *RollingFileLogger) Start() error {
368368
if f.AsyncWrite {
369-
// Async mode: use AsyncLogger and AsyncRotateFileWriter
370369
return initRollingFileLogger(f, func(f *RollingFileLogger) Logger {
371370
return &AsyncLogger{
372371
LoggerBase: f.LoggerBase,
@@ -375,7 +374,6 @@ func (f *RollingFileLogger) Start() error {
375374
}
376375
})
377376
} else {
378-
// Sync mode: use SyncLogger and SyncRotateFileWriter
379377
return initRollingFileLogger(f, func(f *RollingFileLogger) Logger {
380378
return &SyncLogger{
381379
LoggerBase: f.LoggerBase,
@@ -384,9 +382,7 @@ func (f *RollingFileLogger) Start() error {
384382
}
385383
}
386384

387-
// initRollingFileLogger is a generic helper to configure both synchronous and asynchronous FileLogger.
388-
// - fnAppender creates either SyncRotateFileWriter or AsyncRotateFileWriter.
389-
// - fnLogger creates either SyncLogger or AsyncLogger.
385+
// initRollingFileLogger is a helper to configure appenders for RollingFileLogger.
390386
func initRollingFileLogger(
391387
f *RollingFileLogger,
392388
fnLogger func(f *RollingFileLogger) Logger,
@@ -451,14 +447,17 @@ func initRollingFileLogger(
451447
return nil
452448
}
453449

450+
// Append forwards the event to the underlying logger.
454451
func (f *RollingFileLogger) Append(e *Event) {
455452
f.logger.Append(e)
456453
}
457454

455+
// Write forwards raw bytes to the underlying logger.
458456
func (f *RollingFileLogger) Write(b []byte) {
459457
f.logger.Write(b)
460458
}
461459

460+
// Stop stops all appenders.
462461
func (f *RollingFileLogger) Stop() {
463462
for _, a := range f.appenders {
464463
a.Stop()

0 commit comments

Comments
 (0)