This is an automated email from the ASF dual-hosted git repository.

zhongxjian pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/dubbo-kubernetes.git


The following commit(s) were added to refs/heads/master by this push:
     new 0a426dc2 [operator] Supplemental Partial Log Library Logic
0a426dc2 is described below

commit 0a426dc282290acbb3cae718881e9d886fe8191f
Author: mfordjody <[email protected]>
AuthorDate: Sat Dec 14 09:21:32 2024 +0800

    [operator] Supplemental Partial Log Library Logic
---
 operator/pkg/util/clog/clog.go       | 13 +++--
 operator/pkg/util/clog/log/option.go | 20 ++++++++
 operator/pkg/util/clog/log/scope.go  | 98 ++++++++++++++++++++++++++++++++++--
 3 files changed, 122 insertions(+), 9 deletions(-)

diff --git a/operator/pkg/util/clog/clog.go b/operator/pkg/util/clog/clog.go
index a9f0ee1d..d9153aa4 100644
--- a/operator/pkg/util/clog/clog.go
+++ b/operator/pkg/util/clog/clog.go
@@ -1,6 +1,7 @@
 package clog
 
 import (
+       "fmt"
        "github.com/apache/dubbo-kubernetes/operator/pkg/util/clog/log"
        "io"
        "os"
@@ -53,10 +54,6 @@ func NewDefaultLogger() *ConsoleLogger {
        return nil
 }
 
-func (l *ConsoleLogger) LogAndPrint(v ...any) {
-       return
-}
-
 func NewConsoleLogger(stdOut, stdErr io.Writer, scope *log.Scope) 
*ConsoleLogger {
        s := scope
        if s == nil {
@@ -68,3 +65,11 @@ func NewConsoleLogger(stdOut, stdErr io.Writer, scope 
*log.Scope) *ConsoleLogger
                scope:  s,
        }
 }
+
+func (l *ConsoleLogger) Print(s string) {
+       _, _ = l.stdOut.Write([]byte(s))
+}
+
+func (l *ConsoleLogger) PrintErr(s string) {
+       _, _ = l.stdErr.Write([]byte(s))
+}
diff --git a/operator/pkg/util/clog/log/option.go 
b/operator/pkg/util/clog/log/option.go
new file mode 100644
index 00000000..52c76635
--- /dev/null
+++ b/operator/pkg/util/clog/log/option.go
@@ -0,0 +1,20 @@
+package log
+
+const (
+       DefaultScopeName       = "default"
+       defaultStackTraceLevel = NoneLevel
+       defaultOutputPath      = "stdout"
+       defaultErrorOutputPath = "stderr"
+)
+
+type Level int
+
+const (
+       // NoneLevel disables logging
+       NoneLevel Level = iota
+       FatalLevel
+       ErrorLevel
+       WarnLevel
+       InfoLevel
+       DebugLevel
+)
diff --git a/operator/pkg/util/clog/log/scope.go 
b/operator/pkg/util/clog/log/scope.go
index da45db03..336468f2 100644
--- a/operator/pkg/util/clog/log/scope.go
+++ b/operator/pkg/util/clog/log/scope.go
@@ -2,16 +2,18 @@ package log
 
 import (
        "fmt"
+       "go.uber.org/atomic"
+       "go.uber.org/zap/zapcore"
        "strings"
        "sync"
-)
-
-const (
-       DefaultScopeName = "default"
+       "time"
 )
 
 type Scope struct {
-       name string
+       name        string
+       nameToEmit  string
+       outputLevel *atomic.Value
+       logCallers  *atomic.Value
 }
 
 var (
@@ -28,3 +30,89 @@ func registerScope(name string, desc string) *Scope {
        }
        return nil
 }
+
+func (s *Scope) GetOutputLevel() Level {
+       return s.outputLevel.Load().(Level)
+}
+
+func (s *Scope) Infof(format string, args ...any) {
+       if s.GetOutputLevel() >= InfoLevel {
+               msg := maybeSprintf(format, args)
+               s.emit(zapcore.InfoLevel, msg)
+       }
+}
+
+func maybeSprintf(format string, args []any) string {
+       msg := format
+       if len(args) > 0 {
+               msg = fmt.Sprintf(format, args...)
+       }
+       return msg
+}
+
+func (s *Scope) emit(level zapcore.Level, msg string) {
+       s.emitWithTime(level, msg, time.Now())
+}
+
+func (s *Scope) emitWithTime(level zapcore.Level, msg string, t time.Time) {
+       if t.IsZero() {
+               t = time.Now()
+       }
+
+       e := zapcore.Entry{
+               Message:    msg,
+               Level:      level,
+               Time:       t,
+               LoggerName: s.nameToEmit,
+       }
+
+       if s.GetLogCallers() {
+               e.Caller = zapcore.NewEntryCaller(runtime.Caller(s.callerSkip + 
callerSkipOffset))
+       }
+
+       if dumpStack(level, s) {
+               e.Stack = zap.Stack("").String
+       }
+
+       var fields []zapcore.Field
+       if useJSON.Load().(bool) {
+               fields = make([]zapcore.Field, 0, len(s.labelKeys))
+               for _, k := range s.labelKeys {
+                       v := s.labels[k]
+                       fields = append(fields, zap.Field{
+                               Key:       k,
+                               Interface: v,
+                               Type:      zapcore.ReflectType,
+                       })
+               }
+       } else if len(s.labelKeys) > 0 {
+               sb := &strings.Builder{}
+               // Assume roughly 15 chars per kv pair. Its fine to be off, 
this is just an optimization
+               sb.Grow(len(msg) + 15*len(s.labelKeys))
+               sb.WriteString(msg)
+               sb.WriteString("\t")
+               space := false
+               for _, k := range s.labelKeys {
+                       if space {
+                               sb.WriteString(" ")
+                       }
+                       sb.WriteString(k)
+                       sb.WriteString("=")
+                       sb.WriteString(fmt.Sprint(s.labels[k]))
+                       space = true
+               }
+               e.Message = sb.String()
+       }
+
+       pt := funcs.Load().(patchTable)
+       if pt.write != nil {
+               if err := pt.write(e, fields); err != nil {
+                       _, _ = fmt.Fprintf(pt.errorSink, "%v log write error: 
%v\n", time.Now(), err)
+                       _ = pt.errorSink.Sync()
+               }
+       }
+}
+
+func (s *Scope) GetLogCallers() bool {
+       return s.logCallers.Load().(bool)
+}

Reply via email to