/* * 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) }