fix dead loop

This commit is contained in:
kingecg 2024-09-21 14:25:45 +08:00
parent 20e440f79d
commit 6d89afc6e3
3 changed files with 22 additions and 3 deletions

View File

@ -15,6 +15,11 @@ const (
type ConsoleAppender struct {
}
// Close implements LoggerAppender.
func (c *ConsoleAppender) Close() {
}
func (c *ConsoleAppender) GetName() string {
return "console"
}

19
file.go
View File

@ -9,6 +9,13 @@ type FileAppender struct {
filePath string
lchan chan LogEvent
file *os.File
stopChan chan struct{}
}
// Close implements LoggerAppender.
func (f *FileAppender) Close() {
//send stop signal
f.stopChan <- struct{}{}
}
func (f *FileAppender) GetName() string {
@ -17,6 +24,7 @@ func (f *FileAppender) GetName() string {
func (f *FileAppender) start() {
f.lchan = make(chan LogEvent, 10)
f.stopChan = make(chan struct{})
if f.file == nil || int(f.file.Fd()) == -1 {
dirName := filepath.Dir(f.filePath)
_, err := os.Stat(dirName)
@ -29,9 +37,14 @@ func (f *FileAppender) start() {
go func() {
defer f.file.Close()
for {
logEvent := <-f.lchan
logMsg := format(logEvent)
f.file.WriteString(logMsg)
select {
case <-f.stopChan:
return
case logEvent := <-f.lchan:
logMsg := format(logEvent)
f.file.WriteString(logMsg)
}
}
}()
}

View File

@ -56,6 +56,7 @@ type LogEvent struct {
type LoggerAppender interface {
GetName() string
Append(logEvent LogEvent)
Close()
}
var consoleAppender LoggerAppender = &ConsoleAppender{}