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)
+}