Revert "替换默认库为 slog"

This commit is contained in:
刘丹冰 2024-04-15 11:17:47 +08:00 committed by GitHub
parent 313a42ca3c
commit f63ca63e57
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
16 changed files with 108 additions and 227 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -33,7 +33,7 @@ var _pool *kisPool
// Pool 单例构造
func Pool() *kisPool {
_poolOnce.Do(func() {
// 创建kisPool对象
//创建kisPool对象
_pool = new(kisPool)
// fnRouter初始化
@ -61,7 +61,7 @@ func (pool *kisPool) AddFlow(name string, flow Flow) {
panic(errString)
}
log.Logger().Info("Add FlowRouter", "FlowName", name)
log.Logger().InfoF("Add FlowRouter FlowName=%s", name)
}
func (pool *kisPool) GetFlow(name string) Flow {
@ -95,7 +95,7 @@ func (pool *kisPool) FaaS(fnName string, f FaaS) {
panic(errString)
}
log.Logger().Info("Add KisPool", "FuncName", fnName)
log.Logger().InfoF("Add KisPool FuncName=%s", fnName)
}
// CallFunction 调度 Function
@ -127,7 +127,7 @@ func (pool *kisPool) CallFunction(ctx context.Context, fnName string, flow Flow)
// 将flow.Input()中的原始数据反序列化为argType类型的数据
value, err := funcDesc.Serialize.UnMarshal(flow.Input(), argType)
if err != nil {
log.Logger().ErrorX(ctx, "funcDesc.Serialize.DecodeParam", "err", err)
log.Logger().ErrorFX(ctx, "funcDesc.Serialize.DecodeParam err=%v", err)
} else {
params = append(params, value)
continue
@ -153,7 +153,7 @@ func (pool *kisPool) CallFunction(ctx context.Context, fnName string, flow Flow)
}
log.Logger().ErrorX(ctx, "FuncName: Can not find in KisPool, Not Added.", "FuncName", fnName)
log.Logger().ErrorFX(ctx, "FuncName: %s Can not find in KisPool, Not Added.\n", fnName)
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)
}
log.Logger().Info("Add KisPool CaaSInit", "CName", cname)
log.Logger().InfoF("Add KisPool CaaSInit CName=%s", cname)
}
// CallConnInit 调度 ConnInit
@ -193,10 +193,10 @@ func (pool *kisPool) CaaS(cname string, fname string, mode common.KisMode, c Caa
defer pool.cLock.Unlock()
if _, ok := pool.cTree[cname]; !ok {
// cid 首次注册不存在创建二级树NsConnSL
//cid 首次注册不存在创建二级树NsConnSL
pool.cTree[cname] = make(connSL)
// 初始化各类型FunctionMode
//初始化各类型FunctionMode
pool.cTree[cname][common.S] = 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)
}
log.Logger().Info("Add KisPool CaaS", "CName", cname, "FName", fname, "Mode", mode)
log.Logger().InfoF("Add KisPool CaaS CName=%s, FName=%s, Mode =%s", cname, fname, mode)
}
// CallConnector 调度 Connector
@ -223,7 +223,7 @@ func (pool *kisPool) CallConnector(ctx context.Context, flow Flow, conn Connecto
return callback(ctx, conn, fn, flow, args)
}
log.Logger().ErrorX(ctx, "Can not find in KisPool, Not Added.", "CName", conn.GetName(), " FName", fnConf.FName, "mode", mode)
log.Logger().ErrorFX(ctx, "CName:%s FName:%s mode:%s Can not find in KisPool, Not Added.\n", 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,159 +3,65 @@ package log
import (
"context"
"fmt"
"io"
"log/slog"
"os"
"path/filepath"
"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() {
// 如果没有设置 Logger, 则启动时使用默认的 kisDefaultSlog 对象
// 如果没有设置Logger, 则启动时使用默认的kisDefaultLog对象
if Logger() == nil {
MustNewKisDefaultSlog()
SetLogger(&kisDefaultLog{})
}
}
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,22 +17,8 @@ type KisLogger interface {
// DebugF 无上下文的Debug级别日志接口, format字符串格式
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()
SetDebugMode(enable bool)
}
// kisLog 默认的KisLog 对象, 提供默认的日志打印方式, 均是打印在标准输出上。

View File

@ -34,9 +34,9 @@ func RunMetricsService(serverAddr string) error {
http.Handle(common.METRICS_ROUTE, promhttp.Handler())
// 启动HttpServer
err := http.ListenAndServe(serverAddr, nil) // 多个进程不可监听同一个端口
err := http.ListenAndServe(serverAddr, nil) //多个进程不可监听同一个端口
if err != nil {
log.Logger().Error("RunMetricsService", "err", err)
log.Logger().ErrorF("RunMetricsService err = %s\n", err)
}
return err
@ -67,7 +67,7 @@ func InitMetrics() {
Name: common.GANGE_FLOW_SCHE_CNTS_NAME,
Help: common.GANGE_FLOW_SCHE_CNTS_HELP,
},
// 标签名称
//标签名称
[]string{common.LABEL_FLOW_NAME},
)
@ -77,7 +77,7 @@ func InitMetrics() {
Name: common.GANGE_FUNC_SCHE_CNTS_NAME,
Help: common.GANGE_FUNC_SCHE_CNTS_HELP,
},
// 标签名称
//标签名称
[]string{common.LABEL_FUNCTION_NAME, common.LABEL_FUNCTION_MODE},
)
@ -85,7 +85,7 @@ func InitMetrics() {
Metrics.FunctionDuration = prometheus.NewHistogramVec(prometheus.HistogramOpts{
Name: common.HISTOGRAM_FUNCTION_DURATION_NAME,
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},
)
@ -95,7 +95,7 @@ func InitMetrics() {
prometheus.HistogramOpts{
Name: common.HISTOGRAM_FLOW_DURATION_NAME,
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},
)

View File

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

View File

@ -26,7 +26,7 @@ func TestNewFuncConfig(t *testing.T) {
myFunc1 := config.NewFuncConfig("funcName1", common.S, &source, &option)
log.Logger().Info("funcName1", myFunc1)
log.Logger().InfoF("funcName1: %+v\n", myFunc1)
}
func TestNewFlowConfig(t *testing.T) {
@ -50,7 +50,7 @@ func TestNewFlowConfig(t *testing.T) {
myFlow1.AppendFunctionConfig(flowFuncParams1)
myFlow1.AppendFunctionConfig(flowFuncParams2)
log.Logger().Info("myFlow1", myFlow1)
log.Logger().InfoF("myFlow1: %+v\n", myFlow1)
}
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)
if err := myConnector1.WithFunc(myFunc1); err != nil {
log.Logger().Error("WithFunc", "err", err.Error())
log.Logger().ErrorF("WithFunc err: %s\n", err.Error())
}
log.Logger().Info("myConnector1", myConnector1)
log.Logger().InfoF("myConnector1: %+v\n", myConnector1)
}

View File

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

View File

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