@@ -2,6 +2,7 @@ package cmd
2
2
3
3
import (
4
4
"fmt"
5
+ "go.uber.org/zap/zapcore"
5
6
"log"
6
7
"net/http"
7
8
"strings"
24
25
projectID string
25
26
worker int
26
27
domainFilter []string
28
+ dryRun bool
29
+ logLevel string
27
30
)
28
31
29
32
var rootCmd = & cobra.Command {
@@ -35,10 +38,7 @@ var rootCmd = &cobra.Command{
35
38
panic ("auth-token is required" )
36
39
}
37
40
38
- logger , errLogger := zap .NewProduction ()
39
- if errLogger != nil {
40
- panic (errLogger )
41
- }
41
+ logger := getLogger ()
42
42
defer func (logger * zap.Logger ) {
43
43
err := logger .Sync ()
44
44
if err != nil {
@@ -53,7 +53,7 @@ var rootCmd = &cobra.Command{
53
53
Token : authBearerToken ,
54
54
ProjectId : projectID ,
55
55
DomainFilter : endpointDomainFilter ,
56
- DryRun : false ,
56
+ DryRun : dryRun ,
57
57
Workers : worker ,
58
58
}, logger .With (zap .String ("component" , "stackitprovider" )), & http.Client {
59
59
Timeout : 10 * time .Second ,
@@ -70,6 +70,38 @@ var rootCmd = &cobra.Command{
70
70
},
71
71
}
72
72
73
+ func getLogger () * zap.Logger {
74
+ cfg := zap.Config {
75
+ Level : zap .NewAtomicLevelAt (getZapLogLevel ()),
76
+ Encoding : "json" , // or "console"
77
+ // ... other zap configuration as needed
78
+ OutputPaths : []string {"stdout" },
79
+ ErrorOutputPaths : []string {"stderr" },
80
+ }
81
+
82
+ logger , errLogger := cfg .Build ()
83
+ if errLogger != nil {
84
+ panic (errLogger )
85
+ }
86
+
87
+ return logger
88
+ }
89
+
90
+ func getZapLogLevel () zapcore.Level {
91
+ switch logLevel {
92
+ case "DEBUG" :
93
+ return zapcore .DebugLevel
94
+ case "INFO" :
95
+ return zapcore .InfoLevel
96
+ case "WARN" :
97
+ return zapcore .WarnLevel
98
+ case "ERROR" :
99
+ return zapcore .ErrorLevel
100
+ default :
101
+ return zapcore .InfoLevel
102
+ }
103
+ }
104
+
73
105
func Execute () error {
74
106
return rootCmd .Execute ()
75
107
}
@@ -86,6 +118,8 @@ func init() {
86
118
"records, it can be parallelized. However, it is important to avoid setting this number " +
87
119
"excessively high to prevent receiving 429 rate limiting from the API." )
88
120
rootCmd .PersistentFlags ().StringArrayVar (& domainFilter , "domain-filter" , []string {}, "Establishes a filter for DNS zone names" )
121
+ rootCmd .PersistentFlags ().BoolVar (& dryRun , "dry-run" , false , "Specifies whether to perform a dry run." )
122
+ rootCmd .PersistentFlags ().StringVar (& logLevel , "log-level" , "INFO" , "Specifies the log level. Possible values are: DEBUG, INFO, WARN, ERROR" )
89
123
}
90
124
91
125
func initConfig () {
0 commit comments