@@ -2,6 +2,7 @@ package cmd
22
33import (
44 "fmt"
5+ "go.uber.org/zap/zapcore"
56 "log"
67 "net/http"
78 "strings"
2425 projectID string
2526 worker int
2627 domainFilter []string
28+ dryRun bool
29+ logLevel string
2730)
2831
2932var rootCmd = & cobra.Command {
@@ -35,10 +38,7 @@ var rootCmd = &cobra.Command{
3538 panic ("auth-token is required" )
3639 }
3740
38- logger , errLogger := zap .NewProduction ()
39- if errLogger != nil {
40- panic (errLogger )
41- }
41+ logger := getLogger ()
4242 defer func (logger * zap.Logger ) {
4343 err := logger .Sync ()
4444 if err != nil {
@@ -53,7 +53,7 @@ var rootCmd = &cobra.Command{
5353 Token : authBearerToken ,
5454 ProjectId : projectID ,
5555 DomainFilter : endpointDomainFilter ,
56- DryRun : false ,
56+ DryRun : dryRun ,
5757 Workers : worker ,
5858 }, logger .With (zap .String ("component" , "stackitprovider" )), & http.Client {
5959 Timeout : 10 * time .Second ,
@@ -70,6 +70,38 @@ var rootCmd = &cobra.Command{
7070 },
7171}
7272
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+
73105func Execute () error {
74106 return rootCmd .Execute ()
75107}
@@ -86,6 +118,8 @@ func init() {
86118 "records, it can be parallelized. However, it is important to avoid setting this number " +
87119 "excessively high to prevent receiving 429 rate limiting from the API." )
88120 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" )
89123}
90124
91125func initConfig () {
0 commit comments