| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174 | package logimport (	"fmt"	"os")type LevelLogger struct {	Level  uint8	Logger Logger}func (d *LevelLogger) Error(f string, v ...any) {	if d.Level < LevelError {		return	}	d.Logger.Error(f, v...)}func (d *LevelLogger) Warn(f string, v ...any) {	if d.Level < LevelWarn {		return	}	d.Logger.Warn(f, v...)}func (d *LevelLogger) Info(f string, v ...any) {	if d.Level < LevelInfo {		return	}	d.Logger.Info(f, v...)}func (d *LevelLogger) Debug(f string, v ...any) {	if d.Level < LevelDebug {		return	}	d.Logger.Debug(f, v...)}func (d *LevelLogger) CallDepthPlus() {	d.Logger.CallDepthPlus()}func (d *LevelLogger) CallDepthMinus() {	d.Logger.CallDepthMinus()}func NewLevelLogger(level uint8, logger Logger) *LevelLogger {	return &LevelLogger{Level: level, Logger: logger}}type MultiLogger []Loggerfunc (l MultiLogger) Error(f string, v ...any) {	for _, logger := range l {		logger.Error(f, v...)	}}func (l MultiLogger) Warn(f string, v ...any) {	for _, logger := range l {		logger.Warn(f, v...)	}}func (l MultiLogger) Info(f string, v ...any) {	for _, logger := range l {		logger.Info(f, v...)	}}func (l MultiLogger) Debug(f string, v ...any) {	for _, logger := range l {		logger.Debug(f, v...)	}}func (l MultiLogger) CallDepthPlus() {	for _, logger := range l {		logger.CallDepthPlus()	}}func (l MultiLogger) CallDepthMinus() {	for _, logger := range l {		logger.CallDepthMinus()	}}// ErrorLogger 实现 Logger 接口, 但仅调用 Warn 与 Error 时会有效type ErrorLogger struct {	Logger Logger}func (e *ErrorLogger) Error(f string, v ...any) {	e.Logger.CallDepthPlus()	e.Logger.Error(f, v...)	e.Logger.CallDepthMinus()}func (e *ErrorLogger) Warn(f string, v ...any) {	e.Logger.CallDepthPlus()	e.Logger.Warn(f, v...)	e.Logger.CallDepthMinus()}func (e *ErrorLogger) Info(_ string, _ ...any)  {}func (e *ErrorLogger) Debug(_ string, _ ...any) {}func (e *ErrorLogger) CallDepthPlus() {	e.Logger.CallDepthPlus()}func (e *ErrorLogger) CallDepthMinus() {	e.Logger.CallDepthMinus()}var (	// gLog are global default LevelLogger	gLog = MultiLogger{NewLevelLogger(LevelDebug, NewLogger(3, os.Stdout))})// SetLevel// Deprecated, remove after laterfunc SetLevel(level uint8) {	for _, logger := range gLog {		if lg, ok := logger.(*LevelLogger); ok {			lg.Level = level		}	}}func SetServerMod(address string) {	client, err := NewClientLogger(address)	if err != nil {		panic(err)	}	gLog = MultiLogger{client}}func SetOutput(logger ...Logger) {	gLog = logger}func Default() Logger {	return gLog}func Debug(f string, v ...any) {	gLog.Debug(f, v...)}func Info(f string, v ...any) {	gLog.Info(f, v...)}func Warn(f string, v ...any) {	gLog.Warn(f, v...)}func Error(f string, v ...any) {	gLog.Error(f, v...)}func Panic(f string, v ...any) {	gLog.Error(f, v...)	panic(fmt.Sprintf(f, v...))}func Fatal(f string, v ...any) {	gLog.Error(f, v...)	os.Exit(1)}
 |