summaryrefslogtreecommitdiff
path: root/src/loglevel.go
blob: 6f0e8aa7f1596afb8a2855ed5b17be4aeb9329fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
package main

import (
	"fmt"
	"log"
	"os"
)

// LogLevel controls verbosity.
type LogLevel int

const (
	LogDebug LogLevel = iota
	LogInfo
	LogSilent
)

// logLevel is set in main() from the --log-level flag.
var logLevel LogLevel = LogInfo

// setLogLevel parses the flag value.
func setLogLevel(val string) {
	switch val {
	case "debug":
		logLevel = LogDebug
	case "info":
		logLevel = LogInfo
	case "silent":
		logLevel = LogSilent
	default:
		log.Fatalf("invalid --log-level %q (want debug, info, or silent)", val)
	}
}

func logDebug(format string, v ...interface{}) {
	if logLevel == LogDebug {
		log.Printf(format, v...)
	}
}

func logInfo(format string, v ...interface{}) {
	if logLevel <= LogInfo {
		log.Printf(format, v...)
	}
}

func logWarn(format string, v ...interface{}) {
	log.Printf(format, v...)
}

func logFatal(format string, v ...interface{}) {
	log.Fatalf(format, v...)
}

// logHTTPRequest logs an HTTP request in debug mode.
func logHTTPRequest(method, url string, statusCode int, duration float64) {
	if logLevel == LogDebug {
		log.Printf("HTTP %s %s -> %d (%.2fs)", method, url, statusCode, duration)
	}
}

// logHTTPRetry logs a retry attempt in debug mode.
func logHTTPRetry(attempt, maxAttempts int, backoffSecs int, target string) {
	if logLevel == LogDebug {
		log.Printf("retry %d/%d for %s after %ds backoff", attempt, maxAttempts, target, backoffSecs)
	}
}

// logFatalErr is like logFatal but takes a message and error separately.
func logFatalErr(msg string, err error) {
	log.Fatalf("%s: %v", msg, err)
}

// Fatal with two args like the original log.Fatal(err, msg) pattern.
func logFatalTwoArgs(err error, msg string) {
	fmt.Fprintln(os.Stderr, err)
	log.Fatalf("%s", msg)
}