From f3200450e400918f19f659228a324f9f4e4dc084 Mon Sep 17 00:00:00 2001 From: Cytown Date: Sun, 8 Mar 2026 23:15:38 +0800 Subject: [PATCH] modify dingtalk and discord logger --- pkg/channels/dingtalk/dingtalk.go | 4 ++++ pkg/channels/discord/discord.go | 9 +++++++++ pkg/logger/logger.go | 33 ++++++++++++++++++++++++++++++- 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/pkg/channels/dingtalk/dingtalk.go b/pkg/channels/dingtalk/dingtalk.go index 8642ad362..c03122892 100644 --- a/pkg/channels/dingtalk/dingtalk.go +++ b/pkg/channels/dingtalk/dingtalk.go @@ -10,6 +10,7 @@ import ( "github.com/open-dingtalk/dingtalk-stream-sdk-go/chatbot" "github.com/open-dingtalk/dingtalk-stream-sdk-go/client" + dinglog "github.com/open-dingtalk/dingtalk-stream-sdk-go/logger" "github.com/sipeed/picoclaw/pkg/bus" "github.com/sipeed/picoclaw/pkg/channels" @@ -39,6 +40,9 @@ func NewDingTalkChannel(cfg config.DingTalkConfig, messageBus *bus.MessageBus) ( return nil, fmt.Errorf("dingtalk client_id and client_secret are required") } + // Set the logger for the Stream SDK + dinglog.SetLogger(logger.NewLogger("dingtalk")) + base := channels.NewBaseChannel("dingtalk", cfg, messageBus, cfg.AllowFrom, channels.WithMaxMessageLength(20000), channels.WithGroupTrigger(cfg.GroupTrigger), diff --git a/pkg/channels/discord/discord.go b/pkg/channels/discord/discord.go index c3bcbff8d..ee882d290 100644 --- a/pkg/channels/discord/discord.go +++ b/pkg/channels/discord/discord.go @@ -45,6 +45,15 @@ type DiscordChannel struct { } func NewDiscordChannel(cfg config.DiscordConfig, bus *bus.MessageBus) (*DiscordChannel, error) { + + discordgo.Logger = logger.NewLogger("discord"). + WithLevels(map[int]logger.LogLevel{ + discordgo.LogError: logger.ERROR, + discordgo.LogWarning: logger.WARN, + discordgo.LogInformational: logger.INFO, + discordgo.LogDebug: logger.DEBUG, + }).Log + session, err := discordgo.New("Bot " + cfg.Token) if err != nil { return nil, fmt.Errorf("failed to create discord session: %w", err) diff --git a/pkg/logger/logger.go b/pkg/logger/logger.go index ac445c8f0..ef8dcc6a1 100644 --- a/pkg/logger/logger.go +++ b/pkg/logger/logger.go @@ -130,7 +130,6 @@ func getCallerInfo() (string, int, string) { funcName := fn.Name() if strings.HasPrefix(funcName, "runtime.") { - fmt.Println("===", funcName) continue } @@ -296,6 +295,7 @@ func FatalCF(component string, message string, fields map[string]any) { // Logger implements common Logger interface type Logger struct { component string + levels map[int]LogLevel } // Debug logs debug messages @@ -335,17 +335,48 @@ func (b *Logger) Warnf(format string, v ...any) { logMessage(WARN, b.component, fmt.Sprintf(format, v...), nil) } +// Warningf logs formatted warning messages +func (b *Logger) Warningf(format string, v ...any) { + logMessage(WARN, b.component, fmt.Sprintf(format, v...), nil) +} + // Errorf logs formatted error messages func (b *Logger) Errorf(format string, v ...any) { //debugCallerInfo() logMessage(ERROR, b.component, fmt.Sprintf(format, v...), nil) } +// Fatalf logs formatted fatal messages and exits +func (b *Logger) Fatalf(format string, v ...any) { + logMessage(FATAL, b.component, fmt.Sprintf(format, v...), nil) +} + +// Log logs a message at a given level with caller information +// msgL: message level (DEBUG, INFO, WARN, ERROR, FATAL) +// caller: unused parameter reserved for compatibility +// format: format string +// a: format arguments +func (b *Logger) Log(msgL, caller int, format string, a ...interface{}) { + level := LogLevel(msgL) + if b.levels != nil { + if lvl, ok := b.levels[msgL]; ok { + level = lvl + } + } + logMessage(level, b.component, fmt.Sprintf(format, a...), nil) +} + // Sync flushes log buffer (no-op for this implementation) func (b *Logger) Sync() error { return nil } +// WithLevels sets log levels mapping for this logger +func (b *Logger) WithLevels(levels map[int]LogLevel) *Logger { + b.levels = levels + return b +} + // NewLogger creates a new logger instance with optional component name func NewLogger(component string) *Logger { return &Logger{component: component}