2018-05-03 13:04:00 +00:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0
|
|
|
|
*
|
|
|
|
* Copyright (C) 2017-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
|
|
|
|
*/
|
|
|
|
|
2017-06-27 15:33:06 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2017-06-30 12:41:08 +00:00
|
|
|
"io"
|
|
|
|
"io/ioutil"
|
2017-06-27 15:33:06 +00:00
|
|
|
"log"
|
|
|
|
"os"
|
|
|
|
)
|
|
|
|
|
|
|
|
const (
|
2018-05-14 01:38:06 +00:00
|
|
|
LogLevelSilent = iota
|
|
|
|
LogLevelError
|
2017-06-27 15:33:06 +00:00
|
|
|
LogLevelInfo
|
|
|
|
LogLevelDebug
|
|
|
|
)
|
|
|
|
|
|
|
|
type Logger struct {
|
|
|
|
Debug *log.Logger
|
|
|
|
Info *log.Logger
|
|
|
|
Error *log.Logger
|
|
|
|
}
|
|
|
|
|
2017-08-11 14:18:20 +00:00
|
|
|
func NewLogger(level int, prepend string) *Logger {
|
2017-06-30 12:41:08 +00:00
|
|
|
output := os.Stdout
|
2017-06-27 15:33:06 +00:00
|
|
|
logger := new(Logger)
|
2017-06-30 12:41:08 +00:00
|
|
|
|
|
|
|
logErr, logInfo, logDebug := func() (io.Writer, io.Writer, io.Writer) {
|
|
|
|
if level >= LogLevelDebug {
|
|
|
|
return output, output, output
|
|
|
|
}
|
|
|
|
if level >= LogLevelInfo {
|
|
|
|
return output, output, ioutil.Discard
|
|
|
|
}
|
2018-05-14 01:38:06 +00:00
|
|
|
if level >= LogLevelError {
|
|
|
|
return output, ioutil.Discard, ioutil.Discard
|
|
|
|
}
|
|
|
|
return ioutil.Discard, ioutil.Discard, ioutil.Discard
|
2017-06-30 12:41:08 +00:00
|
|
|
}()
|
|
|
|
|
|
|
|
logger.Debug = log.New(logDebug,
|
2017-08-11 14:18:20 +00:00
|
|
|
"DEBUG: "+prepend,
|
2018-05-13 17:33:41 +00:00
|
|
|
log.Ldate|log.Ltime,
|
2017-06-27 15:33:06 +00:00
|
|
|
)
|
2017-06-30 12:41:08 +00:00
|
|
|
|
|
|
|
logger.Info = log.New(logInfo,
|
2017-08-11 14:18:20 +00:00
|
|
|
"INFO: "+prepend,
|
2017-08-01 10:14:38 +00:00
|
|
|
log.Ldate|log.Ltime,
|
2017-06-27 15:33:06 +00:00
|
|
|
)
|
2017-06-30 12:41:08 +00:00
|
|
|
logger.Error = log.New(logErr,
|
2017-08-11 14:18:20 +00:00
|
|
|
"ERROR: "+prepend,
|
2017-08-01 10:14:38 +00:00
|
|
|
log.Ldate|log.Ltime,
|
2017-06-27 15:33:06 +00:00
|
|
|
)
|
|
|
|
return logger
|
|
|
|
}
|