package jscriptx import ( "context" "fmt" "log/slog" "strings" ) // newConsole 造一个绑定到指定脚本的 console 对象,脚本里的 console.log 等 // 直接落到结构化日志里,带上 script 字段,方便按脚本名检索。 func newConsole(logger *slog.Logger, script string) map[string]any { at := func(level slog.Level) func(args ...any) { return func(args ...any) { if !logger.Enabled(context.Background(), level) { return } logger.LogAttrs(context.Background(), level, joinArgs(args), slog.String("script", script), slog.String("source", "console")) } } return map[string]any{ "log": at(slog.LevelInfo), "info": at(slog.LevelInfo), "debug": at(slog.LevelDebug), "warn": at(slog.LevelWarn), "error": at(slog.LevelError), } } // joinArgs 按 console 的习惯用空格拼接参数。 func joinArgs(args []any) string { if len(args) == 0 { return "" } parts := make([]string, 0, len(args)) for _, a := range args { parts = append(parts, fmt.Sprintf("%v", a)) } return strings.Join(parts, " ") }