@@ -102,6 +102,17 @@ func NewApp(name string, version string) DNSBLApp {
102
102
return nil
103
103
},
104
104
},
105
+ & cli.StringFlag {
106
+ Name : "log.format" ,
107
+ Value : "text" ,
108
+ Usage : "format, text is logfmt or use json" ,
109
+ Action : func (cCtx * cli.Context , v string ) error {
110
+ if v != "text" && v != "json" {
111
+ return cli .Exit ("We currently support only text and json: --log.format" , 2 )
112
+ }
113
+ return nil
114
+ },
115
+ },
105
116
}
106
117
107
118
return DNSBLApp {
@@ -110,29 +121,36 @@ func NewApp(name string, version string) DNSBLApp {
110
121
}
111
122
112
123
func (a * DNSBLApp ) Bootstrap () {
113
- a .App .Action = func (ctx * cli.Context ) error {
124
+ a .App .Action = func (cCtx * cli.Context ) error {
114
125
// setup logging
115
126
handler := & slog.HandlerOptions {}
116
127
var writer io.Writer
117
128
118
- if ctx .Bool ("log.debug" ) {
129
+ if cCtx .Bool ("log.debug" ) {
119
130
handler .Level = slog .LevelDebug
120
131
}
121
132
122
- switch ctx .String ("log.output" ) {
133
+ switch cCtx .String ("log.output" ) {
123
134
case "stdout" :
124
135
writer = os .Stdout
125
136
case "stderr" :
126
137
writer = os .Stderr
127
138
}
128
139
129
- log := slog .New (handler .NewTextHandler (writer ))
140
+ var logHandler slog.Handler
141
+ if cCtx .String ("log.format" ) == "text" {
142
+ logHandler = handler .NewTextHandler (writer )
143
+ } else {
144
+ logHandler = handler .NewJSONHandler (writer )
145
+ }
146
+
147
+ log := slog .New (logHandler )
130
148
131
149
c := config.Config {
132
150
Logger : log .With ("area" , "config" ),
133
151
}
134
152
135
- cfgRbls , err := c .LoadFile (ctx .String ("config.rbls" ))
153
+ cfgRbls , err := c .LoadFile (cCtx .String ("config.rbls" ))
136
154
if err != nil {
137
155
return err
138
156
}
@@ -142,7 +160,7 @@ func (a *DNSBLApp) Bootstrap() {
142
160
return fmt .Errorf ("unable to load the rbls from the config: %w" , err )
143
161
}
144
162
145
- cfgTargets , err := c .LoadFile (ctx .String ("config.targets" ))
163
+ cfgTargets , err := c .LoadFile (cCtx .String ("config.targets" ))
146
164
if err != nil {
147
165
return err
148
166
}
@@ -174,12 +192,12 @@ func (a *DNSBLApp) Bootstrap() {
174
192
return err
175
193
}
176
194
177
- rblCollector := setup .CreateCollector (rbls , targets , ctx .Bool ("config.domain-based" ), dnsUtil , log .With ("area" , "metrics" ))
195
+ rblCollector := setup .CreateCollector (rbls , targets , cCtx .Bool ("config.domain-based" ), dnsUtil , log .With ("area" , "metrics" ))
178
196
registry .MustRegister (rblCollector )
179
197
180
198
registryExporter := setup .CreateRegistry ()
181
199
182
- if ctx .Bool ("web.include-exporter-metrics" ) {
200
+ if cCtx .Bool ("web.include-exporter-metrics" ) {
183
201
log .Info ("Exposing exporter metrics" )
184
202
185
203
registryExporter .MustRegister (
@@ -193,21 +211,21 @@ func (a *DNSBLApp) Bootstrap() {
193
211
RegistryExporter : registryExporter ,
194
212
}
195
213
196
- http .Handle (ctx .String ("web.telemetry-path" ), mHandler .Handler ())
214
+ http .Handle (cCtx .String ("web.telemetry-path" ), mHandler .Handler ())
197
215
198
216
pHandler := prober.ProberHandler {
199
217
DNS : dnsUtil ,
200
218
Rbls : rbls ,
201
- DomainBased : ctx .Bool ("config.domain-based" ),
219
+ DomainBased : cCtx .Bool ("config.domain-based" ),
202
220
Logger : log .With ("area" , "prober" ),
203
221
}
204
222
http .Handle ("/prober" , pHandler )
205
223
206
224
log .Info ("starting exporter" ,
207
- slog .String ("web.listen-address" , ctx .String ("web.listen-address" )),
225
+ slog .String ("web.listen-address" , cCtx .String ("web.listen-address" )),
208
226
slog .String ("resolver" , resolver ),
209
227
)
210
- err = http .ListenAndServe (ctx .String ("web.listen-address" ), nil )
228
+ err = http .ListenAndServe (cCtx .String ("web.listen-address" ), nil )
211
229
if err != nil {
212
230
return err
213
231
}
0 commit comments