Initial commit
This commit is contained in:
109
common/logger.go
Normal file
109
common/logger.go
Normal file
@@ -0,0 +1,109 @@
|
||||
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
|
||||
}
|
||||
|
Reference in New Issue
Block a user