Skip to content

Commit 705c1fe

Browse files
committed
Patch debug feature
Previous changes introduced an annoying bug with the debug feature. The following patch it, organize logger logic in its own file and fix a few debug messages.
1 parent 8e2fe83 commit 705c1fe

File tree

3 files changed

+81
-64
lines changed

3 files changed

+81
-64
lines changed

cmd/logger.go

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package cmd
2+
3+
import (
4+
"io"
5+
"os"
6+
7+
"github.com/rs/zerolog"
8+
"github.com/rs/zerolog/log"
9+
)
10+
11+
const (
12+
logFile = "./ssl-checker.log"
13+
)
14+
15+
// LevelWriter interface
16+
type LevelWriter struct {
17+
io.Writer
18+
Level zerolog.Level
19+
}
20+
21+
func (lw *LevelWriter) WriteLevel(l zerolog.Level, p []byte) (n int, err error) {
22+
if l >= lw.Level {
23+
return lw.Write(p)
24+
}
25+
return len(p), nil
26+
}
27+
28+
func setLogger(debug bool) error {
29+
var logWriter *os.File
30+
var err error
31+
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
32+
zerolog.SetGlobalLevel(zerolog.InfoLevel)
33+
if debug {
34+
zerolog.SetGlobalLevel(zerolog.DebugLevel)
35+
36+
logWriter, err = os.OpenFile(
37+
logFile,
38+
os.O_APPEND|os.O_CREATE|os.O_WRONLY,
39+
0664,
40+
)
41+
if err != nil {
42+
panic(err)
43+
}
44+
}
45+
46+
fileWriter := zerolog.New(zerolog.ConsoleWriter{
47+
Out: logWriter,
48+
NoColor: true,
49+
PartsExclude: []string{"time", "level"},
50+
})
51+
consoleWriter := zerolog.NewConsoleWriter(
52+
func(w *zerolog.ConsoleWriter) {
53+
w.Out = os.Stderr
54+
w.PartsExclude = []string{"time"}
55+
},
56+
)
57+
consoleWriterLeveled := &LevelWriter{Writer: consoleWriter, Level: zerolog.InfoLevel}
58+
log.Logger = zerolog.New(zerolog.MultiLevelWriter(fileWriter, consoleWriterLeveled)).With().Timestamp().Logger()
59+
return nil
60+
}

cmd/root.go

+19-62
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,22 @@ package cmd
22

33
import (
44
"fmt"
5-
"io"
65
"os"
76
"path/filepath"
87
"strings"
98

109
"github.com/fabio42/ssl-checker/ui"
1110

1211
tea "github.com/charmbracelet/bubbletea"
13-
"github.com/rs/zerolog"
12+
// "github.com/rs/zerolog"
1413
"github.com/rs/zerolog/log"
1514
"github.com/spf13/cobra"
1615
"github.com/spf13/viper"
1716
)
1817

19-
const (
20-
logFile = "./ssl-checker.log"
21-
)
18+
// const (
19+
// logFile = "./ssl-checker.log"
20+
// )
2221

2322
var (
2423
configFile string
@@ -31,6 +30,16 @@ var rootCmd = &cobra.Command{
3130
Long: "ssl-checker is a tool to _quickly_ check certificate details of multiple https targets.",
3231

3332
PersistentPreRun: func(cmd *cobra.Command, args []string) {
33+
err := setLogger(viper.GetBool("debug"))
34+
if err != nil {
35+
log.Fatal().Msgf("Error failed to configure logger:", err)
36+
}
37+
38+
if viper.GetBool("debug") {
39+
// zerolog.SetGlobalLevel(zerolog.DebugLevel)
40+
log.Warn().Msgf("Debug is enabled, log will be found in %v", logFile)
41+
}
42+
3443
cfgFile := filepath.Base(configFile)
3544
cfgPath := filepath.Dir(configFile)
3645
viper.SetConfigName(cfgFile[:len(cfgFile)-len(filepath.Ext(cfgFile))])
@@ -44,11 +53,6 @@ var rootCmd = &cobra.Command{
4453
}
4554
},
4655
Run: func(cmd *cobra.Command, args []string) {
47-
if viper.GetBool("debug") {
48-
zerolog.SetGlobalLevel(zerolog.DebugLevel)
49-
log.Warn().Msgf("Debug is enabled, log will be found in ./zeroDebug.log")
50-
}
51-
5256
envQuery := strings.Split(envCheck, ",")
5357

5458
if viper.IsSet("queries") {
@@ -134,11 +138,6 @@ func sliceContains(s []string, str string) bool {
134138
}
135139

136140
func init() {
137-
err := setLogger()
138-
if err != nil {
139-
log.Fatal().Msgf("Error failed to configure logger:", err)
140-
}
141-
142141
rootCmd.PersistentFlags().StringVarP(&configFile, "config", "c", "$HOME/.config/ssl-checker/config.yaml", "Configuration file location")
143142
rootCmd.PersistentFlags().BoolP("silent", "s", false, "disable ui")
144143
rootCmd.PersistentFlags().BoolP("debug", "d", false, "Enable debug log, out will be saved in "+logFile)
@@ -149,6 +148,11 @@ func init() {
149148
viper.BindPFlag("debug", rootCmd.PersistentFlags().Lookup("debug"))
150149
viper.BindPFlag("timeout", rootCmd.PersistentFlags().Lookup("timeout"))
151150

151+
// err := setLogger(viper.GetBool("debug"))
152+
// if err != nil {
153+
// log.Fatal().Msgf("Error failed to configure logger:", err)
154+
// }
155+
152156
rootCmd.AddCommand(listEnvs)
153157
}
154158

@@ -157,50 +161,3 @@ func Execute() {
157161
log.Fatal().Msgf("Whoops. There was an error while executing your CLI '%s'", err)
158162
}
159163
}
160-
161-
// https://github.com/rs/zerolog/issues/150
162-
type LevelWriter struct {
163-
io.Writer
164-
Level zerolog.Level
165-
}
166-
167-
func (lw *LevelWriter) WriteLevel(l zerolog.Level, p []byte) (n int, err error) {
168-
if l >= lw.Level {
169-
return lw.Write(p)
170-
}
171-
return len(p), nil
172-
}
173-
174-
func setLogger() error {
175-
var logWriter *os.File
176-
var err error
177-
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
178-
zerolog.SetGlobalLevel(zerolog.InfoLevel)
179-
if viper.GetBool("debug") {
180-
zerolog.SetGlobalLevel(zerolog.DebugLevel)
181-
182-
logWriter, err = os.OpenFile(
183-
logFile,
184-
os.O_APPEND|os.O_CREATE|os.O_WRONLY,
185-
0664,
186-
)
187-
if err != nil {
188-
panic(err)
189-
}
190-
}
191-
192-
fileWriter := zerolog.New(zerolog.ConsoleWriter{
193-
Out: logWriter,
194-
NoColor: true,
195-
PartsExclude: []string{"time", "level"},
196-
})
197-
consoleWriter := zerolog.NewConsoleWriter(
198-
func(w *zerolog.ConsoleWriter) {
199-
w.Out = os.Stderr
200-
w.PartsExclude = []string{"time"}
201-
},
202-
)
203-
consoleWriterLeveled := &LevelWriter{Writer: consoleWriter, Level: zerolog.InfoLevel}
204-
log.Logger = zerolog.New(zerolog.MultiLevelWriter(fileWriter, consoleWriterLeveled)).With().Timestamp().Logger()
205-
return nil
206-
}

domains/domains.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ func (i Response) Description() string { return i.Environment }
6060

6161
func TestDomain(domain, env string, timeO int, out chan<- Response) {
6262
var resp Response
63-
log.Debug().Msgf("SSL query for ", domain)
63+
log.Debug().Msgf("SSL query for %v", domain)
6464

6565
nDialer := net.Dialer{
6666
Timeout: time.Duration(timeO) * time.Second,
@@ -91,7 +91,7 @@ func TestDomain(domain, env string, timeO int, out chan<- Response) {
9191
SAN: tlsConn.ConnectionState().PeerCertificates[0].DNSNames,
9292
Error: err,
9393
}
94-
log.Debug().Msgf("SSL query completed for ", domain)
94+
log.Debug().Msgf("SSL query completed for %v", domain)
9595
}
9696
out <- resp
9797
}

0 commit comments

Comments
 (0)