96 lines
1.6 KiB
Go
96 lines
1.6 KiB
Go
package log
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
)
|
|
|
|
type Logger interface {
|
|
WriteEntry(l LogEntry)
|
|
}
|
|
|
|
type LogEntryType string
|
|
|
|
type LogEntry struct {
|
|
Timestamp time.Time `json:"ts"`
|
|
Type LogEntryType `json:"type"`
|
|
Entry string `json:"log"`
|
|
}
|
|
|
|
const (
|
|
LogTypeInfo = "info"
|
|
LogTypeError = "error"
|
|
LogTypeDebug = "debug"
|
|
)
|
|
|
|
var loggers []Logger
|
|
var logInput chan LogEntry
|
|
var Memory *MemoryLogger
|
|
|
|
func init() {
|
|
|
|
// create some loggers
|
|
Memory = &MemoryLogger{maxsize: 100}
|
|
stdout := &StdoutLogger{}
|
|
|
|
loggers = []Logger{Memory, stdout}
|
|
|
|
// wait for log entries
|
|
logInput = make(chan LogEntry)
|
|
go func() {
|
|
for {
|
|
aLog := <-logInput
|
|
for _, l := range loggers {
|
|
l.WriteEntry(aLog)
|
|
}
|
|
}
|
|
}()
|
|
}
|
|
|
|
func Debug(entry string) {
|
|
logInput <- LogEntry{
|
|
Timestamp: time.Now(),
|
|
Entry: entry,
|
|
Type: LogTypeDebug,
|
|
}
|
|
}
|
|
func Debugf(entry string, args ...interface{}) {
|
|
logInput <- LogEntry{
|
|
Timestamp: time.Now(),
|
|
Entry: fmt.Sprintf(entry, args...),
|
|
Type: LogTypeDebug,
|
|
}
|
|
}
|
|
|
|
func Info(entry string) {
|
|
logInput <- LogEntry{
|
|
Timestamp: time.Now(),
|
|
Entry: entry,
|
|
Type: LogTypeInfo,
|
|
}
|
|
}
|
|
|
|
func Infof(entry string, args ...interface{}) {
|
|
logInput <- LogEntry{
|
|
Timestamp: time.Now(),
|
|
Entry: fmt.Sprintf(entry, args...),
|
|
Type: LogTypeInfo,
|
|
}
|
|
}
|
|
|
|
func Error(entry string) {
|
|
logInput <- LogEntry{
|
|
Timestamp: time.Now(),
|
|
Entry: entry,
|
|
Type: LogTypeError,
|
|
}
|
|
}
|
|
|
|
func Errorf(entry string, args ...interface{}) {
|
|
logInput <- LogEntry{
|
|
Timestamp: time.Now(),
|
|
Entry: fmt.Sprintf(entry, args...),
|
|
Type: LogTypeError,
|
|
}
|
|
}
|