83 lines
2.2 KiB
Go
83 lines
2.2 KiB
Go
package log
|
||
|
||
import (
|
||
_ "embed"
|
||
"reflect"
|
||
"time"
|
||
|
||
"apigo.cc/gojs"
|
||
"apigo.cc/gojs/goja"
|
||
"github.com/ssgo/log"
|
||
"github.com/ssgo/u"
|
||
)
|
||
|
||
//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)...)
|
||
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)...)
|
||
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)...)
|
||
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)...)
|
||
return nil
|
||
},
|
||
"getExceptionString": func(argsIn goja.FunctionCall, vm *goja.Runtime) goja.Value {
|
||
return vm.ToValue(getExceptionString(argsIn, vm))
|
||
},
|
||
}
|
||
|
||
gojs.Register("apigo.cc/gojs/log", gojs.Module{
|
||
Object: obj,
|
||
Desc: "logger api by github.com/ssgo/log",
|
||
TsCode: logTS,
|
||
Example: logMD,
|
||
OnKill2: func() {
|
||
time.Sleep(time.Millisecond * 100) // 等待之前的日志写入
|
||
log.Stop()
|
||
},
|
||
// OnKill时其他任务可能还要写日志,所以在WaitForStop中才开始结束写入日志
|
||
WaitForStop2: func() {
|
||
log.Wait()
|
||
},
|
||
})
|
||
}
|
||
|
||
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).Export())
|
||
}
|