[TASK] add log entry
This commit is contained in:
commit
a096771e20
|
@ -0,0 +1,116 @@
|
||||||
|
package entry
|
||||||
|
|
||||||
|
type logLevel int32
|
||||||
|
|
||||||
|
const (
|
||||||
|
DebugLevel = -1
|
||||||
|
InfoLevel = 0
|
||||||
|
WarnLevel = 1
|
||||||
|
ErrorLevel = 2
|
||||||
|
PanicLevel = 3
|
||||||
|
)
|
||||||
|
|
||||||
|
func (l logLevel) String() string {
|
||||||
|
switch l {
|
||||||
|
case DebugLevel:
|
||||||
|
return "Debug"
|
||||||
|
case InfoLevel:
|
||||||
|
return "Info"
|
||||||
|
case WarnLevel:
|
||||||
|
return "Warn"
|
||||||
|
case ErrorLevel:
|
||||||
|
return "ERROR"
|
||||||
|
case PanicLevel:
|
||||||
|
return "PANIC"
|
||||||
|
|
||||||
|
}
|
||||||
|
return "NOT VALID"
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* log command
|
||||||
|
*/
|
||||||
|
|
||||||
|
// debug
|
||||||
|
func (e *Entry) Debug(v ...interface{}) {
|
||||||
|
e.Log(DebugLevel, v...)
|
||||||
|
}
|
||||||
|
func (e *Entry) Debugf(format string, v ...interface{}) {
|
||||||
|
e.Logf(DebugLevel, format, v...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// info
|
||||||
|
func (e *Entry) Info(v ...interface{}) {
|
||||||
|
e.Log(InfoLevel, v...)
|
||||||
|
}
|
||||||
|
func (e *Entry) Infof(format string, v ...interface{}) {
|
||||||
|
e.Logf(InfoLevel, format, v...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// warn
|
||||||
|
func (e *Entry) Warn(v ...interface{}) {
|
||||||
|
e.Log(WarnLevel, v...)
|
||||||
|
}
|
||||||
|
func (e *Entry) Warnf(format string, v ...interface{}) {
|
||||||
|
e.Logf(WarnLevel, format, v...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// error
|
||||||
|
func (e *Entry) Error(v ...interface{}) {
|
||||||
|
e.Log(ErrorLevel, v...)
|
||||||
|
}
|
||||||
|
func (e *Entry) Errorf(format string, v ...interface{}) {
|
||||||
|
e.Logf(ErrorLevel, format, v...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// panic
|
||||||
|
func (e *Entry) Panic(v ...interface{}) {
|
||||||
|
e.Log(PanicLevel, v...)
|
||||||
|
}
|
||||||
|
func (e *Entry) Panicf(format string, v ...interface{}) {
|
||||||
|
e.Logf(PanicLevel, format, v...)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Direct log command
|
||||||
|
*/
|
||||||
|
|
||||||
|
// debug
|
||||||
|
func Debug(v ...interface{}) {
|
||||||
|
New().Log(DebugLevel, v...)
|
||||||
|
}
|
||||||
|
func Debugf(format string, v ...interface{}) {
|
||||||
|
New().Logf(DebugLevel, format, v...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// info
|
||||||
|
func Info(v ...interface{}) {
|
||||||
|
New().Log(InfoLevel, v...)
|
||||||
|
}
|
||||||
|
func Infof(format string, v ...interface{}) {
|
||||||
|
New().Logf(InfoLevel, format, v...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// warn
|
||||||
|
func Warn(v ...interface{}) {
|
||||||
|
New().Log(WarnLevel, v...)
|
||||||
|
}
|
||||||
|
func Warnf(format string, v ...interface{}) {
|
||||||
|
New().Logf(WarnLevel, format, v...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// error
|
||||||
|
func Error(v ...interface{}) {
|
||||||
|
New().Log(ErrorLevel, v...)
|
||||||
|
}
|
||||||
|
func Errorf(format string, v ...interface{}) {
|
||||||
|
New().Logf(ErrorLevel, format, v...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// panic
|
||||||
|
func Panic(v ...interface{}) {
|
||||||
|
New().Log(PanicLevel, v...)
|
||||||
|
}
|
||||||
|
func Panicf(format string, v ...interface{}) {
|
||||||
|
New().Logf(PanicLevel, format, v...)
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
package entry
|
||||||
|
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
|
type Entry struct {
|
||||||
|
Level logLevel `json:"level"`
|
||||||
|
Fields map[string]interface{} `json:"fields"`
|
||||||
|
Text string `json:"text"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *Entry) Log(level logLevel, v ...interface{}) {
|
||||||
|
e.Text = fmt.Sprint(v...)
|
||||||
|
e.Level = level
|
||||||
|
save(e)
|
||||||
|
}
|
||||||
|
func (e *Entry) Logf(level logLevel, format string, v ...interface{}) {
|
||||||
|
e.Text = fmt.Sprintf(format, v...)
|
||||||
|
e.Level = level
|
||||||
|
save(e)
|
||||||
|
}
|
||||||
|
|
||||||
|
func New() *Entry {
|
||||||
|
return &Entry{Fields: make(map[string]interface{})}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *Entry) AddField(key string, value interface{}) *Entry {
|
||||||
|
e.Fields[key] = value
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
func (e *Entry) AddFields(fields map[string]interface{}) *Entry {
|
||||||
|
for key, value := range fields {
|
||||||
|
e.Fields[key] = value
|
||||||
|
}
|
||||||
|
return e
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *Entry) FieldString() string {
|
||||||
|
return FieldOutput(e.Fields)
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
package entry
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
var TimeFormat = "2006-01-02 15:04:05"
|
||||||
|
|
||||||
|
var InternelSend = func(e *Entry) {
|
||||||
|
format := "%s [%s] %s\n"
|
||||||
|
v := []interface{}{time.Now().Format(TimeFormat), e.Level.String(), e.Text}
|
||||||
|
if len(e.Fields) > 0 {
|
||||||
|
format = "%s [%s] %s (%s)\n"
|
||||||
|
v = append(v, e.FieldString())
|
||||||
|
}
|
||||||
|
text := fmt.Sprintf(format, v...)
|
||||||
|
|
||||||
|
if e.Level == PanicLevel {
|
||||||
|
panic(text)
|
||||||
|
} else if e.Level > WarnLevel {
|
||||||
|
os.Stderr.WriteString(text)
|
||||||
|
} else {
|
||||||
|
os.Stdout.WriteString(text)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var FieldOutput = func(fields map[string]interface{}) string {
|
||||||
|
text := ""
|
||||||
|
for key, value := range fields {
|
||||||
|
text = fmt.Sprintf("%s %s=%v", text, key, value)
|
||||||
|
}
|
||||||
|
return text[1:]
|
||||||
|
}
|
||||||
|
|
||||||
|
func save(e *Entry) {
|
||||||
|
InternelSend(e)
|
||||||
|
}
|
Loading…
Reference in New Issue