Merge branch 'master' into feature/aceld

This commit is contained in:
aceld 2024-04-15 10:45:32 +08:00
commit 517aa5b321
16 changed files with 227 additions and 108 deletions

View File

@ -46,7 +46,7 @@ func NewFuncConfig(
Name: "unNamedSource", Name: "unNamedSource",
} }
source = &defaultSource source = &defaultSource
log.Logger().InfoF("funcName NewConfig source is nil, funcName = %s, use default unNamed Source.", funcName) log.Logger().Info("funcName NewConfig source is nil, use default unNamed Source.", "funcName", funcName)
} }
config.Source = *source config.Source = *source
@ -56,10 +56,10 @@ func NewFuncConfig(
// FunctionS 和 L 需要必传KisConnector参数,原因是S和L需要通过Connector进行建立流式关系 // FunctionS 和 L 需要必传KisConnector参数,原因是S和L需要通过Connector进行建立流式关系
if mode == common.S || mode == common.L { if mode == common.S || mode == common.L {
if option == nil { if option == nil {
log.Logger().ErrorF("Funcion S/L need option->Cid\n") log.Logger().Error("Funcion S/L need option->Cid\n")
return nil return nil
} else if option.CName == "" { } else if option.CName == "" {
log.Logger().ErrorF("Funcion S/L need option->Cid\n") log.Logger().Error("Funcion S/L need option->Cid\n")
return nil return nil
} }
} }

View File

@ -97,8 +97,8 @@ func (flow *KisFlow) Fork(ctx context.Context) kis.Flow {
} }
} }
log.Logger().DebugFX(ctx, "=====>Flow Fork, oldFlow.funcParams = %+v\n", flow.funcParams) log.Logger().DebugX(ctx, "=====>Flow Fork, ", "oldFlow.funcParams", flow.funcParams)
log.Logger().DebugFX(ctx, "=====>Flow Fork, newFlow.funcParams = %+v\n", newFlow.GetFuncParamsAllFuncs()) log.Logger().DebugX(ctx, "=====>Flow Fork, ", "newFlow.funcParams", newFlow.GetFuncParamsAllFuncs())
return newFlow return newFlow
} }
@ -257,7 +257,7 @@ func (flow *KisFlow) Run(ctx context.Context) error {
// 得到当前Function要处理与的源数据 // 得到当前Function要处理与的源数据
if inputData, err := flow.getCurData(); err != nil { if inputData, err := flow.getCurData(); err != nil {
log.Logger().ErrorFX(ctx, "flow.Run(): getCurData err = %s\n", err.Error()) log.Logger().ErrorX(ctx, "flow.Run(): getCurData", "err", err.Error())
return err return err
} else { } else {
flow.inPut = inputData flow.inPut = inputData
@ -350,7 +350,7 @@ func (flow *KisFlow) GetFuncConfigByName(funcName string) *config.KisFuncConfig
if f, ok := flow.Funcs[funcName]; ok { if f, ok := flow.Funcs[funcName]; ok {
return f.GetConfig() return f.GetConfig()
} else { } else {
log.Logger().ErrorF("GetFuncConfigByName(): Function %s not found", funcName) log.Logger().Error("GetFuncConfigByName(): Function not found", "FunctionName", funcName)
return nil return nil
} }
} }

View File

@ -69,11 +69,11 @@ func (flow *KisFlow) commitSrcData(ctx context.Context) error {
// 统计数据总量 Metrics.DataTota 指标累计加1 // 统计数据总量 Metrics.DataTota 指标累计加1
metrics.Metrics.DataTotal.Add(float64(dataCnt)) metrics.Metrics.DataTotal.Add(float64(dataCnt))
//统计当前Flow数量指标 // 统计当前Flow数量指标
metrics.Metrics.FlowDataTotal.WithLabelValues(flow.Name).Add(float64(dataCnt)) metrics.Metrics.FlowDataTotal.WithLabelValues(flow.Name).Add(float64(dataCnt))
} }
log.Logger().DebugFX(ctx, "====> After CommitSrcData, flow_name = %s, flow_id = %s\nAll Level Data =\n %+v\n", flow.Name, flow.Id, flow.data) log.Logger().DebugX(ctx, "====> After CommitSrcData", "flow_name", flow.Name, "flow_id", flow.Id, "All Level Data", flow.data)
return nil return nil
} }
@ -106,7 +106,7 @@ func (flow *KisFlow) commitReuseData(ctx context.Context) error {
// 清空缓冲Buf (如果是ReuseData选项那么提交的全部数据都将不会携带到下一层) // 清空缓冲Buf (如果是ReuseData选项那么提交的全部数据都将不会携带到下一层)
flow.buffer = flow.buffer[0:0] flow.buffer = flow.buffer[0:0]
log.Logger().DebugFX(ctx, " ====> After commitReuseData, flow_name = %s, flow_id = %s\nAll Level Data =\n %+v\n", flow.Name, flow.Id, flow.data) log.Logger().DebugX(ctx, " ====> After commitReuseData", "flow_name", flow.Name, "flow_id", flow.Id, "All Level Data", flow.data)
return nil return nil
} }
@ -122,12 +122,12 @@ func (flow *KisFlow) commitVoidData(ctx context.Context) error {
// 将本层计算的缓冲数据提交到本层结果数据中 // 将本层计算的缓冲数据提交到本层结果数据中
flow.data[flow.ThisFunctionId] = batch flow.data[flow.ThisFunctionId] = batch
log.Logger().DebugFX(ctx, " ====> After commitVoidData, flow_name = %s, flow_id = %s\nAll Level Data =\n %+v\n", flow.Name, flow.Id, flow.data) log.Logger().DebugX(ctx, " ====> After commitVoidData", "flow_name", flow.Name, "flow_id", flow.Id, "All Level Data", flow.data)
return nil return nil
} }
//commitCurData 提交Flow当前执行Function的结果数据 // commitCurData 提交Flow当前执行Function的结果数据
func (flow *KisFlow) commitCurData(ctx context.Context) error { func (flow *KisFlow) commitCurData(ctx context.Context) error {
// 判断本层计算是否有结果数据,如果没有则退出本次Flow Run循环 // 判断本层计算是否有结果数据,如果没有则退出本次Flow Run循环
@ -150,7 +150,7 @@ func (flow *KisFlow) commitCurData(ctx context.Context) error {
// 清空缓冲Buf // 清空缓冲Buf
flow.buffer = flow.buffer[0:0] flow.buffer = flow.buffer[0:0]
log.Logger().DebugFX(ctx, " ====> After commitCurData, flow_name = %s, flow_id = %s\nAll Level Data =\n %+v\n", flow.Name, flow.Id, flow.data) log.Logger().DebugX(ctx, " ====> After commitCurData", "flow_name", flow.Name, "flow_id", flow.Id, "All Level Data", flow.data)
return nil return nil
} }

View File

@ -20,11 +20,11 @@ func NewKisFunctionC() kis.Function {
} }
func (f *KisFunctionC) Call(ctx context.Context, flow kis.Flow) error { func (f *KisFunctionC) Call(ctx context.Context, flow kis.Flow) error {
log.Logger().DebugF("KisFunctionC, flow = %+v\n", flow) log.Logger().Debug("KisFunctionC", "flow", flow)
// 通过KisPool 路由到具体的执行计算Function中 // 通过KisPool 路由到具体的执行计算Function中
if err := kis.Pool().CallFunction(ctx, f.Config.FName, flow); err != nil { if err := kis.Pool().CallFunction(ctx, f.Config.FName, flow); err != nil {
log.Logger().ErrorFX(ctx, "Function Called Error err = %s\n", err) log.Logger().ErrorX(ctx, "Function Called Error", "err", err)
return err return err
} }

View File

@ -20,11 +20,11 @@ func NewKisFunctionE() kis.Function {
} }
func (f *KisFunctionE) Call(ctx context.Context, flow kis.Flow) error { func (f *KisFunctionE) Call(ctx context.Context, flow kis.Flow) error {
log.Logger().DebugF("KisFunctionE, flow = %+v\n", flow) log.Logger().Debug("KisFunctionE", "flow", flow)
// 通过KisPool 路由到具体的执行计算Function中 // 通过KisPool 路由到具体的执行计算Function中
if err := kis.Pool().CallFunction(ctx, f.Config.FName, flow); err != nil { if err := kis.Pool().CallFunction(ctx, f.Config.FName, flow); err != nil {
log.Logger().ErrorFX(ctx, "Function Called Error err = %s\n", err) log.Logger().ErrorX(ctx, "Function Called Error", "err", err)
return err return err
} }

View File

@ -20,11 +20,11 @@ func NewKisFunctionL() kis.Function {
} }
func (f *KisFunctionL) Call(ctx context.Context, flow kis.Flow) error { func (f *KisFunctionL) Call(ctx context.Context, flow kis.Flow) error {
log.Logger().DebugF("KisFunctionL, flow = %+v\n", flow) log.Logger().Debug("KisFunctionL", "flow", flow)
// 通过KisPool 路由到具体的执行计算Function中 // 通过KisPool 路由到具体的执行计算Function中
if err := kis.Pool().CallFunction(ctx, f.Config.FName, flow); err != nil { if err := kis.Pool().CallFunction(ctx, f.Config.FName, flow); err != nil {
log.Logger().ErrorFX(ctx, "Function Called Error err = %s\n", err) log.Logger().ErrorX(ctx, "Function Called Error", "err", err)
return err return err
} }

View File

@ -20,11 +20,11 @@ func NewKisFunctionS() kis.Function {
} }
func (f *KisFunctionS) Call(ctx context.Context, flow kis.Flow) error { func (f *KisFunctionS) Call(ctx context.Context, flow kis.Flow) error {
log.Logger().DebugF("KisFunctionS, flow = %+v\n", flow) log.Logger().Debug("KisFunctionS", "flow", flow)
// 通过KisPool 路由到具体的执行计算Function中 // 通过KisPool 路由到具体的执行计算Function中
if err := kis.Pool().CallFunction(ctx, f.Config.FName, flow); err != nil { if err := kis.Pool().CallFunction(ctx, f.Config.FName, flow); err != nil {
log.Logger().ErrorFX(ctx, "Function Called Error err = %s\n", err) log.Logger().ErrorX(ctx, "Function Called Error", "err", err)
return err return err
} }

View File

@ -20,11 +20,11 @@ func NewKisFunctionV() kis.Function {
} }
func (f *KisFunctionV) Call(ctx context.Context, flow kis.Flow) error { func (f *KisFunctionV) Call(ctx context.Context, flow kis.Flow) error {
log.Logger().DebugF("KisFunctionV, flow = %+v\n", flow) log.Logger().Debug("KisFunctionV", "flow", flow)
// 通过KisPool 路由到具体的执行计算Function中 // 通过KisPool 路由到具体的执行计算Function中
if err := kis.Pool().CallFunction(ctx, f.Config.FName, flow); err != nil { if err := kis.Pool().CallFunction(ctx, f.Config.FName, flow); err != nil {
log.Logger().ErrorFX(ctx, "Function Called Error err = %s\n", err) log.Logger().ErrorX(ctx, "Function Called Error", "err", err)
return err return err
} }

View File

@ -33,7 +33,7 @@ var _pool *kisPool
// Pool 单例构造 // Pool 单例构造
func Pool() *kisPool { func Pool() *kisPool {
_poolOnce.Do(func() { _poolOnce.Do(func() {
//创建kisPool对象 // 创建kisPool对象
_pool = new(kisPool) _pool = new(kisPool)
// fnRouter初始化 // fnRouter初始化
@ -61,7 +61,7 @@ func (pool *kisPool) AddFlow(name string, flow Flow) {
panic(errString) panic(errString)
} }
log.Logger().InfoF("Add FlowRouter FlowName=%s", name) log.Logger().Info("Add FlowRouter", "FlowName", name)
} }
func (pool *kisPool) GetFlow(name string) Flow { func (pool *kisPool) GetFlow(name string) Flow {
@ -95,7 +95,7 @@ func (pool *kisPool) FaaS(fnName string, f FaaS) {
panic(errString) panic(errString)
} }
log.Logger().InfoF("Add KisPool FuncName=%s", fnName) log.Logger().Info("Add KisPool", "FuncName", fnName)
} }
// CallFunction 调度 Function // CallFunction 调度 Function
@ -127,7 +127,7 @@ func (pool *kisPool) CallFunction(ctx context.Context, fnName string, flow Flow)
// 将flow.Input()中的原始数据反序列化为argType类型的数据 // 将flow.Input()中的原始数据反序列化为argType类型的数据
value, err := funcDesc.Serialize.UnMarshal(flow.Input(), argType) value, err := funcDesc.Serialize.UnMarshal(flow.Input(), argType)
if err != nil { if err != nil {
log.Logger().ErrorFX(ctx, "funcDesc.Serialize.DecodeParam err=%v", err) log.Logger().ErrorX(ctx, "funcDesc.Serialize.DecodeParam", "err", err)
} else { } else {
params = append(params, value) params = append(params, value)
continue continue
@ -153,7 +153,7 @@ func (pool *kisPool) CallFunction(ctx context.Context, fnName string, flow Flow)
} }
log.Logger().ErrorFX(ctx, "FuncName: %s Can not find in KisPool, Not Added.\n", fnName) log.Logger().ErrorX(ctx, "FuncName: Can not find in KisPool, Not Added.", "FuncName", fnName)
return errors.New("FuncName: " + fnName + " Can not find in NsPool, Not Added.") return errors.New("FuncName: " + fnName + " Can not find in NsPool, Not Added.")
} }
@ -170,7 +170,7 @@ func (pool *kisPool) CaaSInit(cname string, c ConnInit) {
panic(errString) panic(errString)
} }
log.Logger().InfoF("Add KisPool CaaSInit CName=%s", cname) log.Logger().Info("Add KisPool CaaSInit", "CName", cname)
} }
// CallConnInit 调度 ConnInit // CallConnInit 调度 ConnInit
@ -193,10 +193,10 @@ func (pool *kisPool) CaaS(cname string, fname string, mode common.KisMode, c Caa
defer pool.cLock.Unlock() defer pool.cLock.Unlock()
if _, ok := pool.cTree[cname]; !ok { if _, ok := pool.cTree[cname]; !ok {
//cid 首次注册不存在创建二级树NsConnSL // cid 首次注册不存在创建二级树NsConnSL
pool.cTree[cname] = make(connSL) pool.cTree[cname] = make(connSL)
//初始化各类型FunctionMode // 初始化各类型FunctionMode
pool.cTree[cname][common.S] = make(connFuncRouter) pool.cTree[cname][common.S] = make(connFuncRouter)
pool.cTree[cname][common.L] = make(connFuncRouter) pool.cTree[cname][common.L] = make(connFuncRouter)
} }
@ -208,7 +208,7 @@ func (pool *kisPool) CaaS(cname string, fname string, mode common.KisMode, c Caa
panic(errString) panic(errString)
} }
log.Logger().InfoF("Add KisPool CaaS CName=%s, FName=%s, Mode =%s", cname, fname, mode) log.Logger().Info("Add KisPool CaaS", "CName", cname, "FName", fname, "Mode", mode)
} }
// CallConnector 调度 Connector // CallConnector 调度 Connector
@ -223,7 +223,7 @@ func (pool *kisPool) CallConnector(ctx context.Context, flow Flow, conn Connecto
return callback(ctx, conn, fn, flow, args) return callback(ctx, conn, fn, flow, args)
} }
log.Logger().ErrorFX(ctx, "CName:%s FName:%s mode:%s Can not find in KisPool, Not Added.\n", conn.GetName(), fnConf.FName, mode) log.Logger().ErrorX(ctx, "Can not find in KisPool, Not Added.", "CName", conn.GetName(), " FName", fnConf.FName, "mode", mode)
return nil, errors.New(fmt.Sprintf("CName:%s FName:%s mode:%s Can not find in KisPool, Not Added.", conn.GetName(), fnConf.FName, mode)) return nil, errors.New(fmt.Sprintf("CName:%s FName:%s mode:%s Can not find in KisPool, Not Added.", conn.GetName(), fnConf.FName, mode))
} }

View File

@ -3,65 +3,159 @@ package log
import ( import (
"context" "context"
"fmt" "fmt"
"io"
"log/slog"
"os"
"path/filepath"
"sync" "sync"
) )
// kisDefaultLog 默认提供的日志对象
type kisDefaultLog struct {
debugMode bool
mu sync.Mutex
}
func (log *kisDefaultLog) SetDebugMode(enable bool) {
log.mu.Lock()
defer log.mu.Unlock()
log.debugMode = enable
}
func (log *kisDefaultLog) InfoF(str string, v ...interface{}) {
fmt.Printf(str, v...)
fmt.Printf("\n")
}
func (log *kisDefaultLog) ErrorF(str string, v ...interface{}) {
fmt.Printf(str, v...)
fmt.Printf("\n")
}
func (log *kisDefaultLog) DebugF(str string, v ...interface{}) {
log.mu.Lock()
defer log.mu.Unlock()
if log.debugMode {
fmt.Printf(str, v...)
fmt.Printf("\n")
}
}
func (log *kisDefaultLog) InfoFX(ctx context.Context, str string, v ...interface{}) {
fmt.Println(ctx)
fmt.Printf(str, v...)
fmt.Printf("\n")
}
func (log *kisDefaultLog) ErrorFX(ctx context.Context, str string, v ...interface{}) {
fmt.Println(ctx)
fmt.Printf(str, v...)
fmt.Printf("\n")
}
func (log *kisDefaultLog) DebugFX(ctx context.Context, str string, v ...interface{}) {
log.mu.Lock()
defer log.mu.Unlock()
if log.debugMode {
fmt.Println(ctx)
fmt.Printf(str, v...)
fmt.Printf("\n")
}
}
func init() { func init() {
// 如果没有设置Logger, 则启动时使用默认的kisDefaultLog对象 // 如果没有设置 Logger, 则启动时使用默认的 kisDefaultSlog 对象
if Logger() == nil { if Logger() == nil {
SetLogger(&kisDefaultLog{}) MustNewKisDefaultSlog()
} }
} }
func MustNewKisDefaultSlog(opts ...KisLogOptions) {
defaultSlog := getKisDefaultSLog(opts...)
initDefaultSlog(defaultSlog)
SetLogger(defaultSlog)
}
// kisDefaultSlog 默认提供的日志对象
type kisDefaultSlog struct {
location bool
level slog.Level
jsonFormat bool
writer io.Writer
mu sync.Mutex
}
type KisLogOptions func(k *kisDefaultSlog)
func WithLocation(location bool) KisLogOptions {
return func(k *kisDefaultSlog) {
k.location = location
}
}
func WithLevel(level slog.Level) KisLogOptions {
return func(k *kisDefaultSlog) {
k.level = level
}
}
func WithJSONFormat(jsonFormat bool) KisLogOptions {
return func(k *kisDefaultSlog) {
k.jsonFormat = jsonFormat
}
}
func WithWriter(writer io.Writer) KisLogOptions {
return func(k *kisDefaultSlog) {
k.writer = writer
}
}
var defaultKisLog = &kisDefaultSlog{
location: true,
level: slog.LevelDebug,
jsonFormat: false,
writer: os.Stdout,
}
func getKisDefaultSLog(opts ...KisLogOptions) *kisDefaultSlog {
defaultKisSlog := defaultKisLog
if opts == nil {
return defaultKisSlog
}
for _, opt := range opts {
opt(defaultKisSlog)
}
return defaultKisSlog
}
func (k *kisDefaultSlog) InfoFX(ctx context.Context, str string, v ...interface{}) {
slog.InfoContext(ctx, fmt.Sprintf(str, v...))
}
func (k *kisDefaultSlog) ErrorFX(ctx context.Context, str string, v ...interface{}) {
slog.ErrorContext(ctx, fmt.Sprintf(str, v...))
}
func (k *kisDefaultSlog) DebugFX(ctx context.Context, str string, v ...interface{}) {
slog.DebugContext(ctx, fmt.Sprintf(str, v...))
}
// InfoF 使用格式化格式xxxF或xxxFX要使用 fmt.Sprintf() 函数进行格式化包装
func (k *kisDefaultSlog) InfoF(str string, v ...interface{}) {
slog.Info(fmt.Sprintf(str, v...))
}
func (k *kisDefaultSlog) ErrorF(str string, v ...interface{}) {
slog.Error(fmt.Sprintf(str, v...))
}
func (k *kisDefaultSlog) DebugF(str string, v ...interface{}) {
slog.Debug(fmt.Sprintf(str, v...))
}
func (k *kisDefaultSlog) InfoX(ctx context.Context, str string, v ...interface{}) {
slog.InfoContext(ctx, str, v...)
}
func (k *kisDefaultSlog) ErrorX(ctx context.Context, str string, v ...interface{}) {
slog.ErrorContext(ctx, str, v...)
}
func (k *kisDefaultSlog) DebugX(ctx context.Context, str string, v ...interface{}) {
slog.DebugContext(ctx, str, v...)
}
func (k *kisDefaultSlog) Info(str string, v ...interface{}) {
slog.Info(str, v...)
}
func (k *kisDefaultSlog) Error(str string, v ...interface{}) {
slog.Error(str, v...)
}
func (k *kisDefaultSlog) Debug(str string, v ...interface{}) {
slog.Debug(str, v...)
}
func (k *kisDefaultSlog) SetDebugMode() {
k.mu.Lock()
defer k.mu.Unlock()
k.level = slog.LevelDebug
}
func initDefaultSlog(kisLog *kisDefaultSlog) {
replace := func(groups []string, a slog.Attr) slog.Attr {
if a.Key == slog.SourceKey {
source := a.Value.Any().(*slog.Source)
source.Function = ""
source.File = filepath.Base(source.File)
}
return a
}
ho := &slog.HandlerOptions{
AddSource: kisLog.location,
Level: kisLog.level,
ReplaceAttr: replace,
}
var logger *slog.Logger
if kisLog.jsonFormat {
logger = slog.New(slog.NewJSONHandler(kisLog.writer, ho))
} else {
logger = slog.New(slog.NewTextHandler(kisLog.writer, ho))
}
slog.SetDefault(logger)
}

View File

@ -17,8 +17,22 @@ type KisLogger interface {
// DebugF 无上下文的Debug级别日志接口, format字符串格式 // DebugF 无上下文的Debug级别日志接口, format字符串格式
DebugF(str string, v ...interface{}) DebugF(str string, v ...interface{})
// InfoX 有上下文的Info级别日志接口, format字符串格式
InfoX(ctx context.Context, str string, v ...interface{})
// ErrorX 有上下文的Error级别日志接口, format字符串格式
ErrorX(ctx context.Context, str string, v ...interface{})
// DebugX 有上下文的Debug级别日志接口, format字符串格式
DebugX(ctx context.Context, str string, v ...interface{})
// Info 无上下文的Info级别日志接口, format字符串格式
Info(str string, v ...interface{})
// Error 无上下文的Error级别日志接口, format字符串格式
Error(str string, v ...interface{})
// Debug 无上下文的Debug级别日志接口, format字符串格式
Debug(str string, v ...interface{})
// SetDebugMode 设置Debug模式 // SetDebugMode 设置Debug模式
SetDebugMode(enable bool) SetDebugMode()
} }
// kisLog 默认的KisLog 对象, 提供默认的日志打印方式, 均是打印在标准输出上。 // kisLog 默认的KisLog 对象, 提供默认的日志打印方式, 均是打印在标准输出上。

View File

@ -34,9 +34,9 @@ func RunMetricsService(serverAddr string) error {
http.Handle(common.METRICS_ROUTE, promhttp.Handler()) http.Handle(common.METRICS_ROUTE, promhttp.Handler())
// 启动HttpServer // 启动HttpServer
err := http.ListenAndServe(serverAddr, nil) //多个进程不可监听同一个端口 err := http.ListenAndServe(serverAddr, nil) // 多个进程不可监听同一个端口
if err != nil { if err != nil {
log.Logger().ErrorF("RunMetricsService err = %s\n", err) log.Logger().Error("RunMetricsService", "err", err)
} }
return err return err
@ -67,7 +67,7 @@ func InitMetrics() {
Name: common.GANGE_FLOW_SCHE_CNTS_NAME, Name: common.GANGE_FLOW_SCHE_CNTS_NAME,
Help: common.GANGE_FLOW_SCHE_CNTS_HELP, Help: common.GANGE_FLOW_SCHE_CNTS_HELP,
}, },
//标签名称 // 标签名称
[]string{common.LABEL_FLOW_NAME}, []string{common.LABEL_FLOW_NAME},
) )
@ -77,7 +77,7 @@ func InitMetrics() {
Name: common.GANGE_FUNC_SCHE_CNTS_NAME, Name: common.GANGE_FUNC_SCHE_CNTS_NAME,
Help: common.GANGE_FUNC_SCHE_CNTS_HELP, Help: common.GANGE_FUNC_SCHE_CNTS_HELP,
}, },
//标签名称 // 标签名称
[]string{common.LABEL_FUNCTION_NAME, common.LABEL_FUNCTION_MODE}, []string{common.LABEL_FUNCTION_NAME, common.LABEL_FUNCTION_MODE},
) )
@ -85,7 +85,7 @@ func InitMetrics() {
Metrics.FunctionDuration = prometheus.NewHistogramVec(prometheus.HistogramOpts{ Metrics.FunctionDuration = prometheus.NewHistogramVec(prometheus.HistogramOpts{
Name: common.HISTOGRAM_FUNCTION_DURATION_NAME, Name: common.HISTOGRAM_FUNCTION_DURATION_NAME,
Help: common.HISTOGRAM_FUNCTION_DURATION_HELP, Help: common.HISTOGRAM_FUNCTION_DURATION_HELP,
Buckets: []float64{0.005, 0.01, 0.03, 0.08, 0.1, 0.5, 1.0, 5.0, 10, 100, 1000, 5000, 30000}, //单位ms,最大半分钟 Buckets: []float64{0.005, 0.01, 0.03, 0.08, 0.1, 0.5, 1.0, 5.0, 10, 100, 1000, 5000, 30000}, // 单位ms,最大半分钟
}, },
[]string{common.LABEL_FUNCTION_NAME, common.LABEL_FUNCTION_MODE}, []string{common.LABEL_FUNCTION_NAME, common.LABEL_FUNCTION_MODE},
) )
@ -95,7 +95,7 @@ func InitMetrics() {
prometheus.HistogramOpts{ prometheus.HistogramOpts{
Name: common.HISTOGRAM_FLOW_DURATION_NAME, Name: common.HISTOGRAM_FLOW_DURATION_NAME,
Help: common.HISTOGRAM_FLOW_DURATION_HELP, Help: common.HISTOGRAM_FLOW_DURATION_HELP,
Buckets: []float64{0.005, 0.01, 0.03, 0.08, 0.1, 0.5, 1.0, 5.0, 10, 100, 1000, 5000, 30000, 60000}, //单位ms,最大1分钟 Buckets: []float64{0.005, 0.01, 0.03, 0.08, 0.1, 0.5, 1.0, 5.0, 10, 100, 1000, 5000, 30000, 60000}, // 单位ms,最大1分钟
}, },
[]string{common.LABEL_FLOW_NAME}, []string{common.LABEL_FLOW_NAME},
) )

View File

@ -19,12 +19,12 @@ func FuncDemo2Handler(ctx context.Context, flow kis.Flow) error {
conn, err := flow.GetConnector() conn, err := flow.GetConnector()
if err != nil { if err != nil {
log.Logger().ErrorFX(ctx, "FuncDemo2Handler(): GetConnector err = %s\n", err.Error()) log.Logger().ErrorX(ctx, "FuncDemo2Handler(): GetConnector", "err", err.Error())
return err return err
} }
if _, err := conn.Call(ctx, flow, row); err != nil { if _, err := conn.Call(ctx, flow, row); err != nil {
log.Logger().ErrorFX(ctx, "FuncDemo2Handler(): Call err = %s\n", err.Error()) log.Logger().ErrorX(ctx, "FuncDemo2Handler(): Call", "err", err.Error())
return err return err
} }

View File

@ -26,7 +26,7 @@ func TestNewFuncConfig(t *testing.T) {
myFunc1 := config.NewFuncConfig("funcName1", common.S, &source, &option) myFunc1 := config.NewFuncConfig("funcName1", common.S, &source, &option)
log.Logger().InfoF("funcName1: %+v\n", myFunc1) log.Logger().Info("funcName1", myFunc1)
} }
func TestNewFlowConfig(t *testing.T) { func TestNewFlowConfig(t *testing.T) {
@ -50,7 +50,7 @@ func TestNewFlowConfig(t *testing.T) {
myFlow1.AppendFunctionConfig(flowFuncParams1) myFlow1.AppendFunctionConfig(flowFuncParams1)
myFlow1.AppendFunctionConfig(flowFuncParams2) myFlow1.AppendFunctionConfig(flowFuncParams2)
log.Logger().InfoF("myFlow1: %+v\n", myFlow1) log.Logger().Info("myFlow1", myFlow1)
} }
func TestNewConnConfig(t *testing.T) { func TestNewConnConfig(t *testing.T) {
@ -81,8 +81,8 @@ func TestNewConnConfig(t *testing.T) {
myConnector1 := config.NewConnConfig("connectorName1", "0.0.0.0:9987,0.0.0.0:9997", common.REDIS, "key", connParams) myConnector1 := config.NewConnConfig("connectorName1", "0.0.0.0:9987,0.0.0.0:9997", common.REDIS, "key", connParams)
if err := myConnector1.WithFunc(myFunc1); err != nil { if err := myConnector1.WithFunc(myFunc1); err != nil {
log.Logger().ErrorF("WithFunc err: %s\n", err.Error()) log.Logger().Error("WithFunc", "err", err.Error())
} }
log.Logger().InfoF("myConnector1: %+v\n", myConnector1) log.Logger().Info("myConnector1", myConnector1)
} }

View File

@ -27,7 +27,7 @@ func TestForkFlowCommitBatch(t *testing.T) {
// 3. 提交原始数据 // 3. 提交原始数据
if err := flow1.CommitRowBatch(stringRows); err != nil { if err := flow1.CommitRowBatch(stringRows); err != nil {
log.Logger().ErrorF("CommitRowBatch Error, err = %+v", err) log.Logger().Error("CommitRowBatch Error", "err", err)
panic(err) panic(err)
} }

View File

@ -9,11 +9,22 @@ import (
func TestKisLogger(t *testing.T) { func TestKisLogger(t *testing.T) {
ctx := context.Background() ctx := context.Background()
log.Logger().InfoFX(ctx, "TestKisLogger InfoFX") log.Logger().DebugF("TestKisLogger Format DebugF name = %s, age = %d", "kisFlow", 23)
log.Logger().ErrorFX(ctx, "TestKisLogger ErrorFX") log.Logger().ErrorF("TestKisLogger Format ErrorF name = %s, age = %d", "kisFlow", 12)
log.Logger().DebugFX(ctx, "TestKisLogger DebugFX") log.Logger().InfoF("TestKisLogger Format InfoF name = %s, stu =%+v", "kisFlow",
struct {
name string
age int
}{
name: "kisName",
age: 12,
})
log.Logger().InfoF("TestKisLogger InfoF") log.Logger().InfoX(ctx, "TestKisLogger InfoX")
log.Logger().ErrorF("TestKisLogger ErrorF") log.Logger().ErrorX(ctx, "TestKisLogger ErrorX")
log.Logger().DebugF("TestKisLogger DebugF") log.Logger().DebugX(ctx, "TestKisLogger DebugX")
log.Logger().Info("TestKisLogger Info")
log.Logger().Error("TestKisLogger Error")
log.Logger().Debug("TestKisLogger Debug")
} }