log
log copied to clipboard
index out of range error due 0 len log entry buffer
Version: v1.0.118
I am trying to achieve following setup:
log.DefaultLogger = log.Logger{
Level: log.ParseLevel(cliArgs.LogLevel),
Caller: 1,
TimeField: "time",
TimeFormat: "",
Writer: &log.MultiEntryWriter{
&log.ConsoleWriter { ColorOutput: true },
&log.MultiLevelWriter{
InfoWriter: &log.AsyncWriter {
ChannelSize: 16384,
DiscardOnFull: false,
Writer: &log.FileWriter {
Filename: "info.log",
FileMode: 0600,
MaxSize: 4 * 1024 * 1024 * 1024,
MaxBackups: 32,
EnsureFolder: false,
LocalTime: false,
},
},
WarnWriter: &log.AsyncWriter {
ChannelSize: 16384,
DiscardOnFull: false,
Writer: &log.FileWriter {
Filename: "warn.log",
FileMode: 0600,
MaxSize: 4 * 1024 * 1024 * 1024,
MaxBackups: 32,
EnsureFolder: false,
LocalTime: false,
},
},
ErrorWriter: &log.AsyncWriter {
ChannelSize: 16384,
DiscardOnFull: false,
Writer: &log.FileWriter {
Filename: "error.log",
FileMode: 0600,
MaxSize: 4 * 1024 * 1024 * 1024,
MaxBackups: 32,
EnsureFolder: false,
LocalTime: false,
},
},
},
&log.AsyncWriter {
ChannelSize: 16384,
DiscardOnFull: false,
Writer: &log.FileWriter {
Filename: "universal.log",
FileMode: 0600,
MaxSize: 4 * 1024 * 1024 * 1024,
MaxBackups: 32,
EnsureFolder: false,
LocalTime: false,
},
},
},
}
log.Info().Msg("Hello world Log")
log.DefaultLogger.Writer.(io.Closer).Close()
this results with following error:
[90m2025-06-12T00:34:00.976+03:00[0m [32mINF[0m 1 backend/main.go:109 [36m>[0m Hello world Log
panic: runtime error: index out of range [0] with length 0
goroutine 21 [running]:
github.com/phuslu/log.(*AsyncWriter).writever(0xc0000ac500)
/home/repelliuss/go/pkg/mod/github.com/phuslu/[email protected]/async_linux.go:23 +0x2e5
created by github.com/phuslu/log.(*AsyncWriter).init in goroutine 1
/home/repelliuss/go/pkg/mod/github.com/phuslu/[email protected]/async.go:36 +0xff
exit status 2
due log entry buffer being empty.
reproed
// You can edit this code!
// Click here and start typing.
package main
import (
"io"
"github.com/phuslu/log"
)
func main() {
log.DefaultLogger = log.Logger{
Writer: &log.MultiEntryWriter{
&log.AsyncWriter{
ChannelSize: 16384,
DiscardOnFull: false,
Writer: &log.FileWriter{
Filename: "info.log",
FileMode: 0600,
MaxSize: 4 * 1024 * 1024 * 1024,
MaxBackups: 32,
EnsureFolder: false,
LocalTime: false,
},
},
&log.AsyncWriter{
ChannelSize: 16384,
DiscardOnFull: false,
Writer: &log.FileWriter{
Filename: "universal.log",
FileMode: 0600,
MaxSize: 4 * 1024 * 1024 * 1024,
MaxBackups: 32,
EnsureFolder: false,
LocalTime: false,
},
},
},
}
log.Info().Msg("Hello world Log")
log.DefaultLogger.Writer.(io.Closer).Close()
}
the root cause maybe from this cheating https://github.com/phuslu/log/blob/master/async.go#L79-L82
seems that it brings an unexpected limitation: we cannot support multiple AyncWriter in single logger, let me consider how to fix/improve it.