Skip to content

Commit be610af

Browse files
improved logging messages, std logging from http pkg now matches zerolog format
1 parent d158754 commit be610af

File tree

1 file changed

+26
-3
lines changed

1 file changed

+26
-3
lines changed

gohpts.go

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"crypto/tls"
55
"fmt"
66
"io"
7+
"log"
78
"net"
89
"net/http"
910
"os"
@@ -182,17 +183,17 @@ func (p *proxyApp) handleForward(w http.ResponseWriter, r *http.Request) {
182183
case <-time.Tick(flushTimeout):
183184
err := rc.Flush()
184185
if err != nil {
185-
p.logger.Error().Err(err)
186+
p.logger.Error().Err(err).Msg("Failed flushing buffer")
186187
return
187188
}
188189
err = rc.SetReadDeadline(time.Now().Add(readTimeout))
189190
if err != nil {
190-
p.logger.Error().Err(err)
191+
p.logger.Error().Err(err).Msg("Failed setting read deadline")
191192
return
192193
}
193194
err = rc.SetWriteDeadline(time.Now().Add(writeTimeout))
194195
if err != nil {
195-
p.logger.Error().Err(err)
196+
p.logger.Error().Err(err).Msg("Failed setting write deadline")
196197
return
197198
}
198199
case <-done:
@@ -249,12 +250,14 @@ func (p *proxyApp) handleTunnel(w http.ResponseWriter, r *http.Request) {
249250
if isLocalAddress(r.Host) {
250251
dstConn, err = net.DialTimeout("tcp", r.Host, timeout)
251252
if err != nil {
253+
p.logger.Error().Err(err).Msgf("Failed connecting to %s", r.Host)
252254
http.Error(w, err.Error(), http.StatusServiceUnavailable)
253255
return
254256
}
255257
} else {
256258
dstConn, err = p.sockDialer.Dial("tcp", r.Host)
257259
if err != nil {
260+
p.logger.Error().Err(err).Msgf("Failed connecting to %s", r.Host)
258261
http.Error(w, err.Error(), http.StatusServiceUnavailable)
259262
return
260263
}
@@ -264,11 +267,13 @@ func (p *proxyApp) handleTunnel(w http.ResponseWriter, r *http.Request) {
264267

265268
hj, ok := w.(http.Hijacker)
266269
if !ok {
270+
p.logger.Error().Msg("webserver doesn't support hijacking")
267271
http.Error(w, "webserver doesn't support hijacking", http.StatusInternalServerError)
268272
return
269273
}
270274
srcConn, _, err := hj.Hijack()
271275
if err != nil {
276+
p.logger.Error().Err(err).Msg("Failed hijacking src connection")
272277
http.Error(w, err.Error(), http.StatusInternalServerError)
273278
return
274279
}
@@ -335,12 +340,30 @@ type Config struct {
335340
CertFile string
336341
KeyFile string
337342
}
343+
type logWriter struct {
344+
}
345+
346+
func (writer logWriter) Write(bytes []byte) (int, error) {
347+
return fmt.Print(fmt.Sprintf("%s | ERROR | %s", time.Now().Format(time.RFC3339), string(bytes)))
348+
}
349+
350+
type jsonLogWriter struct {
351+
}
352+
353+
func (writer jsonLogWriter) Write(bytes []byte) (int, error) {
354+
return fmt.Print(fmt.Sprintf("{\"level\":\"error\",\"time\":\"%s\",\"message\":\"%s\"}\n",
355+
time.Now().Format(time.RFC3339), strings.TrimRight(string(bytes), "\n")))
356+
}
338357

339358
func New(conf *Config) *proxyApp {
340359
var logger zerolog.Logger
341360
if conf.Json {
361+
log.SetFlags(0)
362+
log.SetOutput(new(jsonLogWriter))
342363
logger = zerolog.New(os.Stdout).With().Timestamp().Logger()
343364
} else {
365+
log.SetFlags(0)
366+
log.SetOutput(new(logWriter))
344367
output := zerolog.ConsoleWriter{Out: os.Stdout, TimeFormat: time.RFC3339, NoColor: true}
345368
output.FormatLevel = func(i interface{}) string {
346369
return strings.ToUpper(fmt.Sprintf("| %-6s|", i))

0 commit comments

Comments
 (0)