This is an automated email from the ASF dual-hosted git repository. dockerzhang pushed a commit to branch branch-1.12 in repository https://gitbox.apache.org/repos/asf/inlong.git
commit 0b195a96cc2bca271a242979174afb6c34ef710e Author: XiaoYou201 <[email protected]> AuthorDate: Mon Apr 22 20:54:55 2024 +0800 [INLONG-8791][TubeMQ] Add log level and log path configuration API to Tubemq-client-go (#10040) --- .../tubemq-client-go/config/config.go | 47 ++++++++++++++++++++++ .../tubemq-client-go/log/config.go | 43 ++++++++++++++++++++ 2 files changed, 90 insertions(+) diff --git a/inlong-tubemq/tubemq-client-twins/tubemq-client-go/config/config.go b/inlong-tubemq/tubemq-client-twins/tubemq-client-go/config/config.go index 687990cd8d..27f636b4fd 100644 --- a/inlong-tubemq/tubemq-client-twins/tubemq-client-go/config/config.go +++ b/inlong-tubemq/tubemq-client-twins/tubemq-client-go/config/config.go @@ -22,6 +22,7 @@ import ( "encoding/json" "errors" "fmt" + "github.com/apache/inlong/inlong-tubemq/tubemq-client-twins/tubemq-client-go/log" "net/url" "strconv" "strings" @@ -143,6 +144,15 @@ type Config struct { // AfterFail is the heartbeat timeout after a heartbeat failure. AfterFail time.Duration } + + // Log is the namespace for configuration related to log messages, + // used by the logger + Log struct { + // LogPath represents the path where the log save in + LogPath string + // LogLevel represents the level of log + LogLevel string + } } // NewDefaultConfig returns a default config of the client. @@ -175,6 +185,9 @@ func NewDefaultConfig() *Config { c.Heartbeat.MaxRetryTimes = 5 c.Heartbeat.AfterFail = 60000 * time.Millisecond + c.Log.LogLevel = "warn" + c.Log.LogPath = "../log/tubemq.log" + return c } @@ -465,6 +478,16 @@ func getConfigFromToken(config *Config, values []string) error { config.Net.Auth.UserName = values[1] case "authPassword": config.Net.Auth.Password = values[1] + case "logPath": + err = log.SetLogPath(values[1]) + if err == nil { + config.Log.LogPath = values[1] + } + case "logLevel": + err = log.SetLogLevel(values[1]) + if err == nil { + config.Log.LogLevel = values[1] + } default: return fmt.Errorf("address format invalid, unknown keys: %v", values[0]) } @@ -620,3 +643,27 @@ func WithConsumePosition(consumePosition int) Option { c.Consumer.ConsumePosition = consumePosition } } + +// WithLogLevel set log level +func WithLogLevel(level string) Option { + return func(c *Config) { + err := log.SetLogLevel(level) + if err != nil { + log.Errorf("[Log]log level setting error: %s", err.Error()) + return + } + c.Log.LogLevel = level + } +} + +// WithLogPath set log path +func WithLogPath(path string) Option { + return func(c *Config) { + err := log.SetLogPath(path) + if err != nil { + log.Errorf("[Log]log path setting error %s", err.Error()) + return + } + c.Log.LogPath = path + } +} diff --git a/inlong-tubemq/tubemq-client-twins/tubemq-client-go/log/config.go b/inlong-tubemq/tubemq-client-twins/tubemq-client-go/log/config.go index fee8f4a75e..df281b7051 100644 --- a/inlong-tubemq/tubemq-client-twins/tubemq-client-go/log/config.go +++ b/inlong-tubemq/tubemq-client-twins/tubemq-client-go/log/config.go @@ -17,6 +17,11 @@ package log +import ( + "errors" + "os" +) + // OutputConfig defines the output config which can be reconfigured by user. type OutputConfig struct { // LogPath is the path for the log. @@ -39,3 +44,41 @@ var defaultConfig = &OutputConfig{ MaxAge: 3, Level: "warn", } + +// SetLogLevel set log level +func SetLogLevel(level string) error { + if _, exist := LevelNames[level]; !exist { + return errors.New("the supported log levels are: trace, debug, info, warn, error, fatal. Please check your log level") + } + defaultConfig.Level = level + return nil +} + +// SetLogPath set log path +func SetLogPath(path string) error { + err := verifyLogPath(path) + if err != nil { + return err + } + defaultConfig.LogPath = path + return nil +} + +func verifyLogPath(path string) error { + // Check if file already exists + if _, err := os.Stat(path); err == nil { + return nil + } + + // Attempt to create it + var d []byte + err := os.WriteFile(path, d, 0644) + if err == nil { + removeErr := os.Remove(path) + if removeErr != nil { + return removeErr + } // And delete it + return nil + } + return err +}
