Improve logger Pause handling (#24946)

The old EventWriter's Run does: 

```go
for {
    handlePause()
    select {
    case event <- Queue:
         write the log event ...
    }
}
```

So, if an event writer is started before the logger is paused, there is
a chance that the logger isn't paused for the first message.

The new logic is:

```go
for {
    select {
    case event <- Queue:
         handlePause()
         write the log event ...
    }
}
```

Then the event writer can be correctly paused
This commit is contained in:
wxiaoguang 2023-05-28 04:35:44 +08:00 committed by GitHub
parent 7314726bab
commit 0d54395fb5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -68,18 +68,16 @@ func (b *EventWriterBaseImpl) Run(ctx context.Context) {
} }
} }
for { handlePaused := func() {
if b.GetPauseChan != nil { if pause := b.GetPauseChan(); pause != nil {
pause := b.GetPauseChan()
if pause != nil {
select { select {
case <-pause: case <-pause:
case <-ctx.Done(): case <-ctx.Done():
return
} }
} }
} }
for {
select { select {
case <-ctx.Done(): case <-ctx.Done():
return return
@ -88,6 +86,8 @@ func (b *EventWriterBaseImpl) Run(ctx context.Context) {
return return
} }
handlePaused()
if exprRegexp != nil { if exprRegexp != nil {
fileLineCaller := fmt.Sprintf("%s:%d:%s", event.Origin.Filename, event.Origin.Line, event.Origin.Caller) fileLineCaller := fmt.Sprintf("%s:%d:%s", event.Origin.Filename, event.Origin.Line, event.Origin.Caller)
matched := exprRegexp.Match([]byte(fileLineCaller)) || exprRegexp.Match([]byte(event.Origin.MsgSimpleText)) matched := exprRegexp.Match([]byte(fileLineCaller)) || exprRegexp.Match([]byte(event.Origin.MsgSimpleText))