feat: initial Netts energy orchestrator

This commit is contained in:
你的用户名
2025-11-03 19:26:48 +08:00
commit 891c32e288
25 changed files with 2210 additions and 0 deletions

49
internal/logger/logger.go Normal file
View File

@@ -0,0 +1,49 @@
package logger
import (
"log/slog"
"os"
"strings"
"time"
)
// New builds a slog.Logger based on level and format configuration.
func New(level, format string) *slog.Logger {
slogLevel := parseLevel(level)
var handler slog.Handler
opts := &slog.HandlerOptions{
Level: slogLevel,
AddSource: true,
ReplaceAttr: func(groups []string, a slog.Attr) slog.Attr {
if a.Key == slog.TimeKey {
a.Value = slog.StringValue(time.Now().UTC().Format(time.RFC3339Nano))
}
return a
},
}
switch strings.ToLower(format) {
case "json":
handler = slog.NewJSONHandler(os.Stdout, opts)
default:
handler = slog.NewTextHandler(os.Stdout, opts)
}
return slog.New(handler)
}
func parseLevel(level string) slog.Level {
switch strings.ToLower(level) {
case "debug":
return slog.LevelDebug
case "warn", "warning":
return slog.LevelWarn
case "error":
return slog.LevelError
case "info", "":
return slog.LevelInfo
default:
return slog.LevelInfo
}
}