Files
hydra/common/logger.go

110 lines
1.7 KiB
Go
Raw Permalink Normal View History

2015-02-12 01:57:13 +00:00
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
}