sing-box/log/default.go

125 lines
2.5 KiB
Go
Raw Normal View History

2022-07-12 15:17:29 +08:00
package log
import (
"context"
"io"
"os"
"time"
2022-07-30 14:50:33 +08:00
"github.com/sagernet/sing/common"
2022-07-12 15:17:29 +08:00
F "github.com/sagernet/sing/common/format"
)
var _ Factory = (*simpleFactory)(nil)
type simpleFactory struct {
formatter Formatter
writer io.Writer
level Level
}
func NewFactory(formatter Formatter, writer io.Writer) Factory {
return &simpleFactory{
formatter: formatter,
writer: writer,
level: LevelTrace,
}
}
func (f *simpleFactory) Level() Level {
return f.level
}
func (f *simpleFactory) SetLevel(level Level) {
f.level = level
}
func (f *simpleFactory) Logger() ContextLogger {
return f.NewLogger("")
}
func (f *simpleFactory) NewLogger(tag string) ContextLogger {
return &simpleLogger{f, tag}
}
2022-07-30 14:50:33 +08:00
func (f *simpleFactory) Close() error {
return common.Close(f.writer)
}
2022-07-12 15:17:29 +08:00
var _ ContextLogger = (*simpleLogger)(nil)
type simpleLogger struct {
*simpleFactory
tag string
}
func (l *simpleLogger) Log(ctx context.Context, level Level, args []any) {
if level > l.level {
return
}
2022-07-22 14:28:29 +08:00
message := l.formatter.Format(ctx, level, l.tag, F.ToString(args...), time.Now())
2022-07-12 15:17:29 +08:00
if level == LevelPanic {
panic(message)
}
l.writer.Write([]byte(message))
if level == LevelFatal {
os.Exit(1)
}
}
func (l *simpleLogger) Trace(args ...any) {
2022-07-13 19:01:20 +08:00
l.TraceContext(context.Background(), args...)
2022-07-12 15:17:29 +08:00
}
func (l *simpleLogger) Debug(args ...any) {
2022-07-13 19:01:20 +08:00
l.DebugContext(context.Background(), args...)
2022-07-12 15:17:29 +08:00
}
func (l *simpleLogger) Info(args ...any) {
2022-07-13 19:01:20 +08:00
l.InfoContext(context.Background(), args...)
2022-07-12 15:17:29 +08:00
}
func (l *simpleLogger) Warn(args ...any) {
2022-07-13 19:01:20 +08:00
l.WarnContext(context.Background(), args...)
2022-07-12 15:17:29 +08:00
}
func (l *simpleLogger) Error(args ...any) {
2022-07-13 19:01:20 +08:00
l.ErrorContext(context.Background(), args...)
2022-07-12 15:17:29 +08:00
}
func (l *simpleLogger) Fatal(args ...any) {
2022-07-13 19:01:20 +08:00
l.FatalContext(context.Background(), args...)
2022-07-12 15:17:29 +08:00
}
func (l *simpleLogger) Panic(args ...any) {
2022-07-13 19:01:20 +08:00
l.PanicContext(context.Background(), args...)
2022-07-12 15:17:29 +08:00
}
func (l *simpleLogger) TraceContext(ctx context.Context, args ...any) {
l.Log(ctx, LevelTrace, args)
}
func (l *simpleLogger) DebugContext(ctx context.Context, args ...any) {
l.Log(ctx, LevelDebug, args)
}
func (l *simpleLogger) InfoContext(ctx context.Context, args ...any) {
l.Log(ctx, LevelInfo, args)
}
func (l *simpleLogger) WarnContext(ctx context.Context, args ...any) {
l.Log(ctx, LevelWarn, args)
}
func (l *simpleLogger) ErrorContext(ctx context.Context, args ...any) {
l.Log(ctx, LevelError, args)
}
func (l *simpleLogger) FatalContext(ctx context.Context, args ...any) {
l.Log(ctx, LevelFatal, args)
}
func (l *simpleLogger) PanicContext(ctx context.Context, args ...any) {
l.Log(ctx, LevelPanic, args)
}