56 lines
1.1 KiB
Go
56 lines
1.1 KiB
Go
package mint
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"strings"
|
|
)
|
|
|
|
// We use this environment variable to control logging. It should be a
|
|
// comma-separated list of log tags (see below) or "*" to enable all logging.
|
|
const logConfigVar = "MINT_LOG"
|
|
|
|
// Pre-defined log types
|
|
const (
|
|
logTypeCrypto = "crypto"
|
|
logTypeHandshake = "handshake"
|
|
logTypeNegotiation = "negotiation"
|
|
logTypeIO = "io"
|
|
logTypeFrameReader = "frame"
|
|
logTypeVerbose = "verbose"
|
|
)
|
|
|
|
var (
|
|
logFunction = log.Printf
|
|
logAll = false
|
|
logSettings = map[string]bool{}
|
|
)
|
|
|
|
func init() {
|
|
parseLogEnv(os.Environ())
|
|
}
|
|
|
|
func parseLogEnv(env []string) {
|
|
for _, stmt := range env {
|
|
if strings.HasPrefix(stmt, logConfigVar+"=") {
|
|
val := stmt[len(logConfigVar)+1:]
|
|
|
|
if val == "*" {
|
|
logAll = true
|
|
} else {
|
|
for _, t := range strings.Split(val, ",") {
|
|
logSettings[t] = true
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func logf(tag string, format string, args ...interface{}) {
|
|
if logAll || logSettings[tag] {
|
|
fullFormat := fmt.Sprintf("[%s] %s", tag, format)
|
|
logFunction(fullFormat, args...)
|
|
}
|
|
}
|