mirror of
https://gitee.com/rulego/streamsql.git
synced 2026-04-10 14:27:10 +00:00
196 lines
5.1 KiB
Go
196 lines
5.1 KiB
Go
/*
|
|
* Copyright 2025 The RuleGo 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 logger 提供StreamSQL的日志记录功能。
|
|
// 支持不同日志级别和可配置的日志输出后端。
|
|
package logger
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
"log"
|
|
"os"
|
|
"time"
|
|
)
|
|
|
|
// Level 定义日志级别
|
|
type Level int
|
|
|
|
const (
|
|
// DEBUG 调试级别,显示详细的调试信息
|
|
DEBUG Level = iota
|
|
// INFO 信息级别,显示一般信息
|
|
INFO
|
|
// WARN 警告级别,显示警告信息
|
|
WARN
|
|
// ERROR 错误级别,仅显示错误信息
|
|
ERROR
|
|
// OFF 关闭日志
|
|
OFF
|
|
)
|
|
|
|
// String 返回日志级别的字符串表示
|
|
func (l Level) String() string {
|
|
switch l {
|
|
case DEBUG:
|
|
return "DEBUG"
|
|
case INFO:
|
|
return "INFO"
|
|
case WARN:
|
|
return "WARN"
|
|
case ERROR:
|
|
return "ERROR"
|
|
case OFF:
|
|
return "OFF"
|
|
default:
|
|
return "UNKNOWN"
|
|
}
|
|
}
|
|
|
|
// Logger 接口定义了日志记录的基本方法
|
|
type Logger interface {
|
|
// Debug 记录调试级别的日志
|
|
Debug(format string, args ...interface{})
|
|
// Info 记录信息级别的日志
|
|
Info(format string, args ...interface{})
|
|
// Warn 记录警告级别的日志
|
|
Warn(format string, args ...interface{})
|
|
// Error 记录错误级别的日志
|
|
Error(format string, args ...interface{})
|
|
// SetLevel 设置日志级别
|
|
SetLevel(level Level)
|
|
}
|
|
|
|
// defaultLogger 是默认的日志实现
|
|
type defaultLogger struct {
|
|
level Level
|
|
logger *log.Logger
|
|
}
|
|
|
|
// NewLogger 创建一个新的日志记录器
|
|
// 参数:
|
|
// - level: 日志级别
|
|
// - output: 输出目标,如os.Stdout、os.Stderr或文件
|
|
//
|
|
// 返回值:
|
|
// - Logger: 日志记录器实例
|
|
//
|
|
// 示例:
|
|
//
|
|
// logger := NewLogger(INFO, os.Stdout)
|
|
// logger.Info("应用程序启动")
|
|
func NewLogger(level Level, output io.Writer) Logger {
|
|
return &defaultLogger{
|
|
level: level,
|
|
logger: log.New(output, "", 0), // 使用自定义格式,不使用标准库的前缀
|
|
}
|
|
}
|
|
|
|
// Debug 记录调试级别的日志
|
|
func (l *defaultLogger) Debug(format string, args ...interface{}) {
|
|
if l.level <= DEBUG {
|
|
l.log(DEBUG, format, args...)
|
|
}
|
|
}
|
|
|
|
// Info 记录信息级别的日志
|
|
func (l *defaultLogger) Info(format string, args ...interface{}) {
|
|
if l.level <= INFO {
|
|
l.log(INFO, format, args...)
|
|
}
|
|
}
|
|
|
|
// Warn 记录警告级别的日志
|
|
func (l *defaultLogger) Warn(format string, args ...interface{}) {
|
|
if l.level <= WARN {
|
|
l.log(WARN, format, args...)
|
|
}
|
|
}
|
|
|
|
// Error 记录错误级别的日志
|
|
func (l *defaultLogger) Error(format string, args ...interface{}) {
|
|
if l.level <= ERROR {
|
|
l.log(ERROR, format, args...)
|
|
}
|
|
}
|
|
|
|
// SetLevel 设置日志级别
|
|
func (l *defaultLogger) SetLevel(level Level) {
|
|
l.level = level
|
|
}
|
|
|
|
// log 内部日志记录方法,格式化输出日志信息
|
|
func (l *defaultLogger) log(level Level, format string, args ...interface{}) {
|
|
if l.level == OFF {
|
|
return
|
|
}
|
|
|
|
timestamp := time.Now().Format("2006-01-02 15:04:05.000")
|
|
message := fmt.Sprintf(format, args...)
|
|
logLine := fmt.Sprintf("[%s] [%s] %s", timestamp, level.String(), message)
|
|
l.logger.Println(logLine)
|
|
}
|
|
|
|
// discardLogger 是一个丢弃所有日志输出的记录器
|
|
type discardLogger struct{}
|
|
|
|
// NewDiscardLogger 创建一个丢弃所有日志的记录器
|
|
// 用于在不需要日志输出的场景中使用
|
|
func NewDiscardLogger() Logger {
|
|
return &discardLogger{}
|
|
}
|
|
|
|
func (d *discardLogger) Debug(format string, args ...interface{}) {}
|
|
func (d *discardLogger) Info(format string, args ...interface{}) {}
|
|
func (d *discardLogger) Warn(format string, args ...interface{}) {}
|
|
func (d *discardLogger) Error(format string, args ...interface{}) {}
|
|
func (d *discardLogger) SetLevel(level Level) {}
|
|
|
|
// 全局默认日志记录器
|
|
var defaultInstance Logger = NewLogger(INFO, os.Stdout)
|
|
|
|
// SetDefault 设置全局默认日志记录器
|
|
func SetDefault(logger Logger) {
|
|
defaultInstance = logger
|
|
}
|
|
|
|
// GetDefault 获取全局默认日志记录器
|
|
func GetDefault() Logger {
|
|
return defaultInstance
|
|
}
|
|
|
|
// 便捷的全局日志方法
|
|
|
|
// Debug 使用默认日志记录器记录调试信息
|
|
func Debug(format string, args ...interface{}) {
|
|
defaultInstance.Debug(format, args...)
|
|
}
|
|
|
|
// Info 使用默认日志记录器记录信息
|
|
func Info(format string, args ...interface{}) {
|
|
defaultInstance.Info(format, args...)
|
|
}
|
|
|
|
// Warn 使用默认日志记录器记录警告
|
|
func Warn(format string, args ...interface{}) {
|
|
defaultInstance.Warn(format, args...)
|
|
}
|
|
|
|
// Error 使用默认日志记录器记录错误
|
|
func Error(format string, args ...interface{}) {
|
|
defaultInstance.Error(format, args...)
|
|
}
|