gllvm/logging.go
2017-06-29 12:43:12 -07:00

66 lines
1.2 KiB
Go

package main
import (
"fmt"
"os"
"strings"
)
const (
error_v = iota
warning_v
info_v
debug_v
)
const (
loggingLevelEnvVar = "GLLVM_OUTPUT_LEVEL"
loggingFileEnvVar = "GLLVM_OUTPUT_FILE"
)
var loggingLevels = map[string]int{
"ERROR": error_v,
"WARNING": warning_v,
"INFO": info_v,
"DEBUG": debug_v,
}
var level = 0
var filePointer = os.Stderr
func init() {
if envLevelStr := os.Getenv(loggingLevelEnvVar); envLevelStr != "" {
if envLevelVal, ok := loggingLevels[envLevelStr]; ok {
level = envLevelVal
}
}
if envFileStr := os.Getenv(loggingFileEnvVar); envFileStr != "" {
if loggingFP, err := os.OpenFile(envFileStr, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0600); err == nil {
filePointer = loggingFP
}
}
}
func makeLogger(lvl int) func(format string, a ...interface{}) {
return func(format string, a ...interface{}) {
if level >= lvl {
msg := fmt.Sprintf(format, a...)
if !strings.HasSuffix(msg, "\n") {
msg += "\n"
}
filePointer.WriteString(msg)
}
}
}
var logDebug = makeLogger(debug_v)
var logInfo = makeLogger(info_v)
var logWarning = makeLogger(warning_v)
var logError = makeLogger(error_v)
func logFatal(format string, a ...interface{}) {
logError(format, a...)
os.Exit(1)
}