log/log.go

73 lines
1.9 KiB
Go
Raw Permalink Normal View History

2024-10-11 10:52:22 +08:00
package log
import (
_ "embed"
"reflect"
2024-10-11 10:52:22 +08:00
"apigo.cc/gojs"
"apigo.cc/gojs/goja"
"github.com/ssgo/u"
2024-10-11 10:52:22 +08:00
)
//go:embed log.ts
var logTS string
//go:embed README.md
var logMD string
func init() {
obj := map[string]any{
"info": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
args := gojs.MakeArgs(&argsIn, vm).Check(1)
args.Logger.Info(getExceptionString(argsIn, vm), args.Map2Array(1)...)
2024-10-11 10:52:22 +08:00
return nil
},
"warn": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
args := gojs.MakeArgs(&argsIn, vm).Check(1)
args.Logger.Warning(getExceptionString(argsIn, vm), args.Map2Array(1)...)
2024-10-11 10:52:22 +08:00
return nil
},
"error": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
args := gojs.MakeArgs(&argsIn, vm).Check(1)
args.Logger.Error(getExceptionString(argsIn, vm), args.Map2Array(1)...)
2024-10-11 10:52:22 +08:00
return nil
},
"debug": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
args := gojs.MakeArgs(&argsIn, vm).Check(1)
args.Logger.Debug(getExceptionString(argsIn, vm), args.Map2Array(1)...)
2024-10-11 10:52:22 +08:00
return nil
},
"getExceptionString": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
return vm.ToValue(getExceptionString(argsIn, vm))
},
2024-10-11 10:52:22 +08:00
}
gojs.Register("apigo.cc/gojs/log", gojs.Module{
Object: obj,
Desc: "logger api by github.com/ssgo/log",
TsCode: logTS,
Example: logMD,
})
}
func getExceptionString(args goja.FunctionCall, vm *goja.Runtime) string {
if len(args.Arguments) == 0 {
return ""
}
if args.Argument(0).ExportType() != nil && args.Argument(0).ExportType().Kind() == reflect.Map {
ex := args.Argument(0).ToObject(vm)
message := ex.Get("message")
if message != nil {
messageStr := u.String(message.Export())
if messageStr != "" {
stack := ex.Get("stack")
if stack != nil {
messageStr += "\n" + u.String(stack.Export())
}
return messageStr
}
}
}
return u.String(args.Argument(0))
}