105 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			105 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Go
		
	
	
	
/*
 | 
						|
 * Copyright 2025 coze-dev Authors
 | 
						|
 *
 | 
						|
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
						|
 * you may not use this file except in compliance with the License.
 | 
						|
 * You may obtain a copy of the License at
 | 
						|
 *
 | 
						|
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
 *
 | 
						|
 * Unless required by applicable law or agreed to in writing, software
 | 
						|
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
 * See the License for the specific language governing permissions and
 | 
						|
 * limitations under the License.
 | 
						|
 */
 | 
						|
 | 
						|
package logs
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"fmt"
 | 
						|
	"io"
 | 
						|
)
 | 
						|
 | 
						|
// FormatLogger is a logs interface that output logs with a format.
 | 
						|
type FormatLogger interface {
 | 
						|
	Tracef(format string, v ...interface{})
 | 
						|
	Debugf(format string, v ...interface{})
 | 
						|
	Infof(format string, v ...interface{})
 | 
						|
	Noticef(format string, v ...interface{})
 | 
						|
	Warnf(format string, v ...interface{})
 | 
						|
	Errorf(format string, v ...interface{})
 | 
						|
	Fatalf(format string, v ...interface{})
 | 
						|
}
 | 
						|
 | 
						|
// Logger is a logs interface that provides logging function with levels.
 | 
						|
type Logger interface {
 | 
						|
	Trace(v ...interface{})
 | 
						|
	Debug(v ...interface{})
 | 
						|
	Info(v ...interface{})
 | 
						|
	Notice(v ...interface{})
 | 
						|
	Warn(v ...interface{})
 | 
						|
	Error(v ...interface{})
 | 
						|
	Fatal(v ...interface{})
 | 
						|
}
 | 
						|
 | 
						|
// CtxLogger is a logs interface that accepts a context argument and output
 | 
						|
// logs with a format.
 | 
						|
type CtxLogger interface {
 | 
						|
	CtxTracef(ctx context.Context, format string, v ...interface{})
 | 
						|
	CtxDebugf(ctx context.Context, format string, v ...interface{})
 | 
						|
	CtxInfof(ctx context.Context, format string, v ...interface{})
 | 
						|
	CtxNoticef(ctx context.Context, format string, v ...interface{})
 | 
						|
	CtxWarnf(ctx context.Context, format string, v ...interface{})
 | 
						|
	CtxErrorf(ctx context.Context, format string, v ...interface{})
 | 
						|
	CtxFatalf(ctx context.Context, format string, v ...interface{})
 | 
						|
}
 | 
						|
 | 
						|
// Control provides methods to config a logs.
 | 
						|
type Control interface {
 | 
						|
	SetLevel(Level)
 | 
						|
	SetOutput(io.Writer)
 | 
						|
}
 | 
						|
 | 
						|
// FullLogger is the combination of Logger, FormatLogger, CtxLogger and Control.
 | 
						|
type FullLogger interface {
 | 
						|
	Logger
 | 
						|
	FormatLogger
 | 
						|
	CtxLogger
 | 
						|
	Control
 | 
						|
}
 | 
						|
 | 
						|
// Level defines the priority of a log message.
 | 
						|
// When a logs is configured with a level, any log message with a lower
 | 
						|
// log level (smaller by integer comparison) will not be output.
 | 
						|
type Level int
 | 
						|
 | 
						|
// The levels of logs.
 | 
						|
const (
 | 
						|
	LevelTrace Level = iota
 | 
						|
	LevelDebug
 | 
						|
	LevelInfo
 | 
						|
	LevelNotice
 | 
						|
	LevelWarn
 | 
						|
	LevelError
 | 
						|
	LevelFatal
 | 
						|
)
 | 
						|
 | 
						|
var strs = []string{
 | 
						|
	"[Trace] ",
 | 
						|
	"[Debug] ",
 | 
						|
	"[Info] ",
 | 
						|
	"[Notice] ",
 | 
						|
	"[Warn] ",
 | 
						|
	"[Error] ",
 | 
						|
	"[Fatal] ",
 | 
						|
}
 | 
						|
 | 
						|
func (lv Level) toString() string {
 | 
						|
	if lv >= LevelTrace && lv <= LevelFatal {
 | 
						|
		return strs[lv]
 | 
						|
	}
 | 
						|
	return fmt.Sprintf("[?%d] ", lv)
 | 
						|
}
 |