This is an automated email from the ASF dual-hosted git repository.
miaoliyao pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/shardingsphere-on-cloud.git
The following commit(s) were added to refs/heads/main by this push:
new 6bee145 feat:cli add logger (#216)
6bee145 is described below
commit 6bee14573ce26713b61de82574e397969c156fe1
Author: lltgo <[email protected]>
AuthorDate: Tue Feb 21 13:29:51 2023 +0800
feat:cli add logger (#216)
---
pitr/cli/go.mod | 8 ++-
pitr/cli/go.sum | 18 +++++++
pitr/cli/internal/cmd/backup.go | 30 ++++++-----
pitr/cli/internal/cmd/resotre.go | 32 ++++++------
pitr/cli/internal/cmd/root.go | 22 ++++----
pitr/cli/internal/cmd/show.go | 32 ++++++------
pitr/cli/main.go | 24 ++++++++-
pitr/cli/{main.go => pkg/logging/field.go} | 34 +++++++++----
pitr/cli/pkg/logging/log.go | 69 +++++++++++++++++++++++++
pitr/cli/pkg/logging/zap_log.go | 82 ++++++++++++++++++++++++++++++
10 files changed, 286 insertions(+), 65 deletions(-)
diff --git a/pitr/cli/go.mod b/pitr/cli/go.mod
index 187e2bb..27eab04 100644
--- a/pitr/cli/go.mod
+++ b/pitr/cli/go.mod
@@ -2,8 +2,14 @@ module github.com/apache/shardingsphere-on-cloud/pitr/cli
go 1.20
+require (
+ github.com/spf13/cobra v1.6.1
+ go.uber.org/zap v1.24.0
+)
+
require (
github.com/inconshreveable/mousetrap v1.0.1 // indirect
- github.com/spf13/cobra v1.6.1 // indirect
github.com/spf13/pflag v1.0.5 // indirect
+ go.uber.org/atomic v1.7.0 // indirect
+ go.uber.org/multierr v1.6.0 // indirect
)
diff --git a/pitr/cli/go.sum b/pitr/cli/go.sum
index 442875a..9726ac1 100644
--- a/pitr/cli/go.sum
+++ b/pitr/cli/go.sum
@@ -1,10 +1,28 @@
+github.com/benbjohnson/clock v1.1.0
h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod
h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
+github.com/davecgh/go-spew v1.1.0/go.mod
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/davecgh/go-spew v1.1.1
h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/inconshreveable/mousetrap v1.0.1
h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc=
github.com/inconshreveable/mousetrap v1.0.1/go.mod
h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
+github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
+github.com/pmezard/go-difflib v1.0.0
h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod
h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/russross/blackfriday/v2 v2.1.0/go.mod
h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/spf13/cobra v1.6.1 h1:o94oiPyS4KD1mPy2fmcYYHHfCxLqYjJOhGsCHFZtEzA=
github.com/spf13/cobra v1.6.1/go.mod
h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod
h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/stretchr/objx v0.1.0/go.mod
h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/stretchr/testify v1.3.0/go.mod
h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
+github.com/stretchr/testify v1.8.0
h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
+go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
+go.uber.org/atomic v1.7.0/go.mod
h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
+go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI=
+go.uber.org/multierr v1.6.0 h1:y6IPFStTAIT5Ytl7/XYmHvzXQ7S3g/IeZW9hyZ5thw4=
+go.uber.org/multierr v1.6.0/go.mod
h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU=
+go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60=
+go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
diff --git a/pitr/cli/internal/cmd/backup.go b/pitr/cli/internal/cmd/backup.go
index 62a2fff..946f7a8 100644
--- a/pitr/cli/internal/cmd/backup.go
+++ b/pitr/cli/internal/cmd/backup.go
@@ -21,6 +21,8 @@ import (
"fmt"
"github.com/spf13/cobra"
+
+ "github.com/apache/shardingsphere-on-cloud/pitr/cli/pkg/logging"
)
const (
@@ -35,45 +37,45 @@ var Backup = &cobra.Command{
host, err := cmd.Flags().GetString(host)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:host:%s", host))
+ logging.Info(fmt.Sprintf("flags:host:%s", host))
port, err := cmd.Flags().GetUint16(port)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:port:%d", port))
+ logging.Info(fmt.Sprintf("flags:port:%d", port))
un, err := cmd.Flags().GetString(username)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:username:%s", un))
+ logging.Info(fmt.Sprintf("flags:username:%s", un))
pw, err := cmd.Flags().GetString(password)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:password:%s", pw))
+ logging.Info(fmt.Sprintf("flags:password:%s", pw))
agentPort, err := cmd.Flags().GetUint16(agentPort)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:agentPort:%d", agentPort))
+ logging.Info(fmt.Sprintf("flags:agentPort:%d", agentPort))
backupPath, err := cmd.Flags().GetString(dnBackupPath)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:backupPath:%s", backupPath))
+ logging.Info(fmt.Sprintf("flags:backupPath:%s", backupPath))
threadsNum, err := cmd.Flags().GetUint16(dnThreadsNum)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:threadsNum:%d", threadsNum))
+ logging.Info(fmt.Sprintf("flags:threadsNum:%d", threadsNum))
},
}
diff --git a/pitr/cli/internal/cmd/resotre.go b/pitr/cli/internal/cmd/resotre.go
index 4c25d06..95393e3 100644
--- a/pitr/cli/internal/cmd/resotre.go
+++ b/pitr/cli/internal/cmd/resotre.go
@@ -21,6 +21,8 @@ import (
"fmt"
"github.com/spf13/cobra"
+
+ "github.com/apache/shardingsphere-on-cloud/pitr/cli/pkg/logging"
)
const (
@@ -34,47 +36,47 @@ var Restore = &cobra.Command{
Run: func(cmd *cobra.Command, args []string) {
host, err := cmd.Flags().GetString(host)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:host:%s", host))
+ logging.Info(fmt.Sprintf("flags:host:%s", host))
port, err := cmd.Flags().GetUint16(port)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:port:%d", port))
+ logging.Info(fmt.Sprintf("flags:port:%d", port))
un, err := cmd.Flags().GetString(username)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:username:%s", un))
+ logging.Info(fmt.Sprintf("flags:username:%s", un))
pw, err := cmd.Flags().GetString(password)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:password:%s", pw))
+ logging.Info(fmt.Sprintf("flags:password:%s", pw))
agentPort, err := cmd.Flags().GetUint16(agentPort)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:agentPort:%d", agentPort))
+ logging.Info(fmt.Sprintf("flags:agentPort:%d", agentPort))
csn, err := cmd.Flags().GetString(csn)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:csn:%s", csn))
+ logging.Info(fmt.Sprintf("flags:csn:%s", csn))
id, err := cmd.Flags().GetString(backupRecordID)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:id:%s", id))
+ logging.Info(fmt.Sprintf("flags:id:%s", id))
- fmt.Println("Restore...")
+ logging.Info("Restore...")
},
}
diff --git a/pitr/cli/internal/cmd/root.go b/pitr/cli/internal/cmd/root.go
index 9232eea..fef013e 100644
--- a/pitr/cli/internal/cmd/root.go
+++ b/pitr/cli/internal/cmd/root.go
@@ -21,6 +21,8 @@ import (
"fmt"
"github.com/spf13/cobra"
+
+ "github.com/apache/shardingsphere-on-cloud/pitr/cli/pkg/logging"
)
const (
@@ -37,33 +39,33 @@ var Root = &cobra.Command{
Run: func(cmd *cobra.Command, args []string) {
host, err := cmd.Flags().GetString(host)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:host:%s", host))
+ logging.Info(fmt.Sprintf("flags:host:%s", host))
port, err := cmd.Flags().GetUint16(port)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:port:%d", port))
+ logging.Info(fmt.Sprintf("flags:port:%d", port))
un, err := cmd.Flags().GetString(username)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:username:%s", un))
+ logging.Info(fmt.Sprintf("flags:username:%s", un))
pw, err := cmd.Flags().GetString(password)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:password:%s", pw))
+ logging.Info(fmt.Sprintf("flags:password:%s", pw))
agentPort, err := cmd.Flags().GetUint16(agentPort)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:agentPort:%d", agentPort))
+ logging.Info(fmt.Sprintf("flags:agentPort:%d", agentPort))
},
CompletionOptions: cobra.CompletionOptions{
DisableDefaultCmd: true,
diff --git a/pitr/cli/internal/cmd/show.go b/pitr/cli/internal/cmd/show.go
index 664fd2d..3860bb6 100644
--- a/pitr/cli/internal/cmd/show.go
+++ b/pitr/cli/internal/cmd/show.go
@@ -21,6 +21,8 @@ import (
"fmt"
"github.com/spf13/cobra"
+
+ "github.com/apache/shardingsphere-on-cloud/pitr/cli/pkg/logging"
)
var Show = &cobra.Command{
@@ -29,47 +31,47 @@ var Show = &cobra.Command{
Run: func(cmd *cobra.Command, args []string) {
host, err := cmd.Flags().GetString(host)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:host:%s", host))
+ logging.Info(fmt.Sprintf("flags:host:%s", host))
port, err := cmd.Flags().GetUint16(port)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:port:%d", port))
+ logging.Info(fmt.Sprintf("flags:port:%d", port))
un, err := cmd.Flags().GetString(username)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:username:%s", un))
+ logging.Info(fmt.Sprintf("flags:username:%s", un))
pw, err := cmd.Flags().GetString(password)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:password:%s", pw))
+ logging.Info(fmt.Sprintf("flags:password:%s", pw))
agentPort, err := cmd.Flags().GetUint16(agentPort)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:agentPort:%d", agentPort))
+ logging.Info(fmt.Sprintf("flags:agentPort:%d", agentPort))
csn, err := cmd.Flags().GetString(csn)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:csn:%s", csn))
+ logging.Info(fmt.Sprintf("flags:csn:%s", csn))
id, err := cmd.Flags().GetString(backupRecordID)
if err != nil {
- fmt.Println(err)
+ logging.Error(err.Error())
}
- fmt.Println(fmt.Sprintf("flags:id:%s", id))
+ logging.Info(fmt.Sprintf("flags:id:%s", id))
- fmt.Println("Restore...")
+ logging.Info("Restore...")
},
}
diff --git a/pitr/cli/main.go b/pitr/cli/main.go
index 1d772f4..643fffa 100644
--- a/pitr/cli/main.go
+++ b/pitr/cli/main.go
@@ -20,11 +20,33 @@ package main
import (
"fmt"
+ "go.uber.org/zap"
+ "go.uber.org/zap/zapcore"
+
"github.com/apache/shardingsphere-on-cloud/pitr/cli/internal/cmd"
+ "github.com/apache/shardingsphere-on-cloud/pitr/cli/pkg/logging"
)
func main() {
+ prodConfig := zap.NewProductionConfig()
+ prodConfig.Encoding = "console"
+ prodConfig.DisableCaller = true
+ prodConfig.DisableStacktrace = true
+ prodConfig.EncoderConfig.EncodeTime = zapcore.RFC3339TimeEncoder
+ prodConfig.Level = zap.NewAtomicLevelAt(zapcore.InfoLevel)
+ prodConfig.EncoderConfig.ConsoleSeparator = " "
+
+ logger, err := prodConfig.Build(
+ zap.WithCaller(false),
+ zap.AddCallerSkip(1),
+ zap.AddStacktrace(zapcore.FatalLevel),
+ )
+ if err != nil {
+ panic(fmt.Errorf("an unknown error occured in the zap-log"))
+ }
+ logging.Init(logger)
+
if err := cmd.Root.Execute(); err != nil {
- fmt.Println(fmt.Sprintf("Err: %s", err))
+ logging.Error(fmt.Sprintf("Err: %s", err))
}
}
diff --git a/pitr/cli/main.go b/pitr/cli/pkg/logging/field.go
similarity index 56%
copy from pitr/cli/main.go
copy to pitr/cli/pkg/logging/field.go
index 1d772f4..2119278 100644
--- a/pitr/cli/main.go
+++ b/pitr/cli/pkg/logging/field.go
@@ -15,16 +15,32 @@
* limitations under the License.
*/
-package main
+package logging
-import (
- "fmt"
+type ILog interface {
+ Field(k FieldKey, v string) ILog
+ Fields(m map[FieldKey]string) ILog
- "github.com/apache/shardingsphere-on-cloud/pitr/cli/internal/cmd"
-)
+ Debug(s string)
+ Info(s string)
+ Warn(s string)
+ Error(s string)
+ Panic(s string)
+}
+
+type FieldKey string
-func main() {
- if err := cmd.Root.Execute(); err != nil {
- fmt.Println(fmt.Sprintf("Err: %s", err))
- }
+func (f FieldKey) String() string {
+ return string(f)
}
+
+const (
+ ErrorKey FieldKey = "error"
+ RequestID FieldKey = "requestID"
+ Stack FieldKey = "stack"
+ Duration FieldKey = "duration"
+ Path FieldKey = "path" // original routing path
+ RequestUri FieldKey = "requestUri" // http requesting uri
+ HttpMethod FieldKey = "httpMethod"
+ HttpStatus FieldKey = "httpStatus"
+)
diff --git a/pitr/cli/pkg/logging/log.go b/pitr/cli/pkg/logging/log.go
new file mode 100644
index 0000000..b2d2209
--- /dev/null
+++ b/pitr/cli/pkg/logging/log.go
@@ -0,0 +1,69 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements. See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+ */
+
+package logging
+
+import "go.uber.org/zap"
+
+var l *ZapLogger
+
+func Log() ILog {
+ return l
+}
+
+func Init(logger *zap.Logger) ILog {
+ l = &ZapLogger{logger: logger}
+ return l
+}
+
+func Field(k FieldKey, v string) ILog {
+ m := map[FieldKey]string{k: v}
+ for k, v := range l.fields {
+ m[k] = v
+ }
+ return &ZapLogger{logger: l.logger, fields: m}
+}
+
+func Fields(m map[FieldKey]string) ILog {
+ if m == nil {
+ m = map[FieldKey]string{}
+ }
+ for k, v := range l.fields {
+ m[k] = v
+ }
+ return &ZapLogger{logger: l.logger, fields: m}
+}
+
+func Debug(s string) {
+ l.logger.Debug(s, fields(l)...)
+}
+
+func Info(s string) {
+ l.logger.Info(s, fields(l)...)
+}
+
+func Warn(s string) {
+ l.logger.Warn(s, fields(l)...)
+}
+
+func Error(s string) {
+ l.logger.Error(s, fields(l)...)
+}
+
+func Panic(s string) {
+ l.logger.Panic(s, fields(l)...)
+}
diff --git a/pitr/cli/pkg/logging/zap_log.go b/pitr/cli/pkg/logging/zap_log.go
new file mode 100644
index 0000000..cfda378
--- /dev/null
+++ b/pitr/cli/pkg/logging/zap_log.go
@@ -0,0 +1,82 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements. See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License. You may obtain a copy of the License at
+*
+* http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+ */
+
+package logging
+
+import (
+ "go.uber.org/zap"
+ "go.uber.org/zap/zapcore"
+)
+
+type ZapLogger struct {
+ fields map[FieldKey]string
+ logger *zap.Logger
+}
+
+func NewLog(l *zap.Logger) ILog {
+ return &ZapLogger{logger: l}
+}
+
+func (z *ZapLogger) Field(k FieldKey, v string) ILog {
+ m := map[FieldKey]string{k: v}
+ for k, v := range z.fields {
+ m[k] = v
+ }
+ return &ZapLogger{logger: z.logger, fields: m}
+}
+
+func (z *ZapLogger) Fields(m map[FieldKey]string) ILog {
+ if m == nil {
+ m = map[FieldKey]string{}
+ }
+ for k, v := range z.fields {
+ m[k] = v
+ }
+ return &ZapLogger{logger: z.logger, fields: m}
+}
+
+func (z *ZapLogger) Debug(s string) {
+ z.logger.Debug(s, fields(z)...)
+}
+
+func (z *ZapLogger) Info(s string) {
+ z.logger.Info(s, fields(z)...)
+}
+
+func (z *ZapLogger) Warn(s string) {
+ z.logger.Warn(s, fields(z)...)
+}
+
+func (z *ZapLogger) Error(s string) {
+ z.logger.Error(s, fields(z)...)
+}
+
+func (z *ZapLogger) Panic(s string) {
+ z.logger.Panic(s, fields(z)...)
+}
+
+func fields(z *ZapLogger) []zap.Field {
+ fields := make([]zap.Field, 0, len(z.fields))
+ for k, v := range z.fields {
+ fields = append(fields, zap.Field{
+ Key: k.String(),
+ Type: zapcore.StringType,
+ String: v,
+ })
+ }
+ return fields
+}