@@ -25,13 +25,14 @@ import (
2525
2626func init () {
2727 RegisterConverter [BufferFullPolicy ](ParseBufferFullPolicy )
28- }
2928
30- func init () {
31- RegisterPlugin [FileLogger ]("File" , PluginTypeLogger )
29+ RegisterPlugin [AppenderRef ]("AppenderRef" , PluginTypeAppenderRef )
3230 RegisterPlugin [SyncLogger ]("Logger" , PluginTypeLogger )
3331 RegisterPlugin [AsyncLogger ]("AsyncLogger" , PluginTypeLogger )
34- RegisterPlugin [AppenderRef ]("AppenderRef" , PluginTypeAppenderRef )
32+ RegisterPlugin [DiscardLogger ]("Discard" , PluginTypeLogger )
33+ RegisterPlugin [ConsoleLogger ]("Console" , PluginTypeLogger )
34+ RegisterPlugin [FileLogger ]("File" , PluginTypeLogger )
35+ RegisterPlugin [RollingFileLogger ]("RollingFile" , PluginTypeLogger )
3536}
3637
3738// Logger is the interface implemented by all loggers.
@@ -166,10 +167,8 @@ type SyncLogger struct {
166167 AppenderRefs
167168}
168169
169- func (c * SyncLogger ) Start () error {
170- c .AppenderRefs .sortByLevel ()
171- return nil
172- }
170+ func (c * SyncLogger ) Start () error { return nil }
171+ func (c * SyncLogger ) Stop () {}
173172
174173// Append sends the event directly to appenders (blocking).
175174func (c * SyncLogger ) Append (e * Event ) {
@@ -189,8 +188,6 @@ func (c *SyncLogger) Write(b []byte) {
189188 c .writeToAppenders (MaxLevel , b )
190189}
191190
192- func (c * SyncLogger ) Stop () {}
193-
194191// BufferFullPolicy specifies what to do when an async buffer is full.
195192type BufferFullPolicy int
196193
@@ -245,8 +242,6 @@ func (c *AsyncLogger) Start() error {
245242 c .wait = make (chan struct {})
246243 c .stop = & Event {}
247244
248- c .AppenderRefs .sortByLevel ()
249-
250245 // Worker goroutine to process buffered items
251246 go func () {
252247 for v := range c .buf {
@@ -342,16 +337,13 @@ func (c *AsyncLogger) Stop() {
342337 close (c .buf )
343338}
344339
345- // ----------------------------------------------------------------------------
346- // rolling file logger
347- // ----------------------------------------------------------------------------
348-
349340// RollingFileLogger is a logger implementation that writes log events to files.
350341// It can work in either synchronous or asynchronous mode depending on AsyncWrite.
351342// It also supports splitting warning/error logs into a separate file.
352343type RollingFileLogger struct {
353344 LoggerBase
354- logger Logger
345+ logger Logger
346+ appenders []* AppenderRef
355347
356348 // File output configuration
357349 FileDir string `PluginAttribute:"fileDir,default=./logs"`
@@ -450,8 +442,13 @@ func initRollingFileLogger(
450442 default : // for linter
451443 }
452444
453- // Start the underlying logger (and all appenders)
454- return f .logger .Start ()
445+ f .appenders = appenders
446+ for _ , a := range f .appenders {
447+ if err := a .Start (); err != nil {
448+ return err
449+ }
450+ }
451+ return nil
455452}
456453
457454func (f * RollingFileLogger ) Append (e * Event ) {
@@ -463,5 +460,7 @@ func (f *RollingFileLogger) Write(b []byte) {
463460}
464461
465462func (f * RollingFileLogger ) Stop () {
466-
463+ for _ , a := range f .appenders {
464+ a .Stop ()
465+ }
467466}
0 commit comments