110 lines
1.7 KiB
Go
110 lines
1.7 KiB
Go
package common
|
|
|
|
import(
|
|
"fmt"
|
|
"log"
|
|
"log/syslog"
|
|
"io"
|
|
)
|
|
|
|
type Logger struct {
|
|
useSyslog bool
|
|
verbosity int
|
|
|
|
syslog *syslog.Writer
|
|
stdlog *log.Logger
|
|
}
|
|
|
|
|
|
func NewLogger(prefix string, useSyslog bool, syslogFailOutput io.Writer, verbosity int) (*Logger, error) {
|
|
out := Logger{
|
|
verbosity: verbosity,
|
|
useSyslog: useSyslog}
|
|
|
|
var err error
|
|
out.stdlog = log.New(syslogFailOutput, prefix+" ", log.LstdFlags)
|
|
|
|
if useSyslog {
|
|
out.syslog, err = syslog.New(syslog.LOG_INFO, prefix)
|
|
}
|
|
|
|
|
|
return &out, err
|
|
}
|
|
|
|
|
|
func (l *Logger) Debug(m string, v ...interface{}) {
|
|
var err error
|
|
|
|
if l.verbosity < 2 { // -vv
|
|
return
|
|
}
|
|
|
|
if l.useSyslog {
|
|
err = l.syslog.Debug(l.buildString("", m, v...))
|
|
}
|
|
|
|
if err != nil || !l.useSyslog {
|
|
l.stdlog.Println(l.buildString("DEBUG", m, v...))
|
|
}
|
|
}
|
|
|
|
func (l *Logger) Info(m string, v ...interface{}) {
|
|
var err error
|
|
|
|
if l.verbosity < 1 { // -v
|
|
return
|
|
}
|
|
|
|
if l.useSyslog {
|
|
err = l.syslog.Info(l.buildString("", m, v...))
|
|
}
|
|
|
|
if err != nil || !l.useSyslog {
|
|
l.stdlog.Println(l.buildString(" INFO", m, v...))
|
|
}
|
|
}
|
|
|
|
func (l *Logger) Warn(m string, v ...interface{}) {
|
|
var err error
|
|
|
|
// Warnings are always shown
|
|
|
|
if l.useSyslog {
|
|
err = l.syslog.Warning(l.buildString("", m, v...))
|
|
}
|
|
|
|
if err != nil || !l.useSyslog {
|
|
l.stdlog.Println(l.buildString(" WARN", m, v...))
|
|
}
|
|
}
|
|
|
|
func (l *Logger) Error(m string, v ...interface{}) {
|
|
var err error
|
|
|
|
// Errors are always shown
|
|
|
|
if l.useSyslog {
|
|
err = l.syslog.Err(l.buildString("", m, v...))
|
|
}
|
|
|
|
if err != nil || !l.useSyslog {
|
|
l.stdlog.Println(l.buildString("ERROR", m, v...))
|
|
}
|
|
}
|
|
|
|
func (l *Logger) buildString(level, m string, v ...interface{}) string {
|
|
out := m
|
|
|
|
if level != "" {
|
|
out = level + ":" + m
|
|
}
|
|
|
|
if len(v) > 0 {
|
|
out = fmt.Sprintf(out, v...)
|
|
}
|
|
|
|
return out
|
|
}
|
|
|