klog/log_test.go

236 lines
5.5 KiB
Go

package klog
import (
"io"
"os"
"runtime"
"testing"
)
func TestDev(t *testing.T) {
LEVEL = Lerror | Ldebug | Lwarn | Linfo
PROD = false
// log.system = "dev"
Error("TestDev")
ErrorF(H{"Test": "set"}, "TestDev")
Debug("TestDev")
DebugF(H{"Test": "set"}, "TestDev")
Warn("TestDev")
WarnF(H{"Test": "set"}, "TestDev")
Info("TestDev")
InfoF(H{"Test": "set"}, "TestDev")
}
func TestProd(t *testing.T) {
PROD = true
// log.system = "prod"
Error("TestProd")
ErrorF(H{"Test": "set"}, "TestProd")
Debug("TestProd")
DebugF(H{"Test": "set"}, "TestProd")
Warn("TestProd")
WarnF(H{"Test": "set"}, "TestProd")
Info("TestProd")
InfoF(H{"Test": "set"}, "TestProd")
}
func TestSubDev(t *testing.T) {
PROD = false
l := Sub("TestSubDev")
l.Error("TestSubDev")
l.ErrorF(H{"Test": "set"}, "TestSubDev")
l.Debug("TestSubDev")
l.DebugF(H{"Test": "set"}, "TestSubDev")
l.Warn("TestSubDev")
l.WarnF(H{"Test": "set"}, "TestSubDev")
l.Info("TestSubDev")
l.InfoF(H{"Test": "set"}, "TestSubDev")
}
func TestSubProd(t *testing.T) {
PROD = true
l := Sub("TestSubProd")
l.Error("TestSubProd")
l.ErrorF(H{"Test": "set"}, "TestSubProd")
l.Debug("TestSubProd")
l.DebugF(H{"Test": "set"}, "TestSubProd")
l.Warn("TestSubProd")
l.WarnF(H{"Test": "set"}, "TestSubProd")
l.Info("TestSubProd")
l.InfoF(H{"Test": "set"}, "TestSubProd")
}
func TestColoring(t *testing.T) {
l := Sub("color")
l.Error(l.M("Hello", BgHiGreen, Italic, FgWhite), ", ", l.M("world", FgBlue, BgHiYellow))
l.Error(l.M("Hello", FgHiGreen), ", ", l.M("world", Underline, FgMagenta))
Error(M("Hello", FgHiGreen), ", ", M("world", Underline, FgMagenta))
}
func TestToFile(t *testing.T) {
PROD = true
l := Sub("TestToFile")
f, err := os.OpenFile("dist/test.log", os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)
if err != nil {
t.Error(err)
}
l.SetOutput(f)
l.SetErrOutput(f)
l.Error("TestToFile")
l.Debug("TestToFile")
l.Warn("TestToFile")
l.Info("TestToFile")
l.SetColor(true)
l.Error("TestToFile colored")
l.Debug("TestToFile colored")
l.Warn("TestToFile colored")
l.Info("TestToFile colored")
}
func TestApplyChild(t *testing.T) {
PROD = true
l := Sub("parent")
l1 := l.Sub("child1")
l2 := l.Sub("child2")
l3 := l.Sub("child3")
l1.Info("child1")
l2.Info("child2")
l3.Info("child3")
l.SetOutputAll(io.Discard)
l1.Info("child1-discard")
l2.Info("child2-discard")
l3.Info("child3-discard")
SetOutputAll(os.Stdout)
l1.Info("child1-stdout")
l2.Info("child2-stdout")
l3.Info("child3-stdout")
SetColorAll(false)
l1.Info("child1-nocolor")
l2.Info("child2-nocolor")
l3.Info("child3-nocolor")
}
func TestDefaultLogger(t *testing.T) {
l := DefaultLogger()
l.Error("TestDefaultLogger")
l.Debug("TestDefaultLogger")
l.Warn("TestDefaultLogger")
l.Info("TestDefaultLogger")
}
func BenchmarkDefault(b *testing.B) {
SetErrOutput(io.Discard)
SetOutput(io.Discard)
LEVEL = 15
for i := 0; i < b.N; i++ {
PROD = true
Error("err in", "BenchmarkDefault: ", i)
ErrorF(H{"test": "fields"}, "err in", "BenchmarkDefault: ", i)
Debug("err in", "BenchmarkDefault: ", i)
DebugF(H{"test": "fields"}, "err in", "BenchmarkDefault: ", i)
Warn("err in", "BenchmarkDefault: ", i)
WarnF(H{"test": "fields"}, "err in", "BenchmarkDefault: ", i)
}
for i := 0; i < b.N; i++ {
PROD = false
Error("err in", "BenchmarkDefault: ", i)
ErrorF(H{"test": "fields"}, "err in", "BenchmarkDefault: ", i)
Debug("err in", "BenchmarkDefault: ", i)
DebugF(H{"test": "fields"}, "err in", "BenchmarkDefault: ", i)
Warn("err in", "BenchmarkDefault: ", i)
WarnF(H{"test": "fields"}, "err in", "BenchmarkDefault: ", i)
}
}
func BenchmarkSub1(b *testing.B) {
LEVEL = 15
l := Sub("Sub1")
l.SetErrOutput(io.Discard)
l.SetOutput(io.Discard)
for i := 0; i < b.N; i++ {
PROD = true
l.Error("err in", "BenchmarkDefault: ", i)
l.ErrorF(H{"test": "fields"}, "err in", "BenchmarkSub1: ", i)
l.Debug("err in", "BenchmarkDefault: ", i)
l.DebugF(H{"test": "fields"}, "err in", "BenchmarkSub1: ", i)
l.Warn("err in", "BenchmarkDefault: ", i)
l.WarnF(H{"test": "fields"}, "err in", "BenchmarkSub1: ", i)
}
for i := 0; i < b.N; i++ {
PROD = false
l.Error("err in", "BenchmarkDefault: ", i)
l.ErrorF(H{"test": "fields"}, "err in", "BenchmarkSub1: ", i)
l.Debug("err in", "BenchmarkDefault: ", i)
l.DebugF(H{"test": "fields"}, "err in", "BenchmarkSub1: ", i)
l.Warn("err in", "BenchmarkDefault: ", i)
l.WarnF(H{"test": "fields"}, "err in", "BenchmarkSub1: ", i)
}
}
func TestIntercept(t *testing.T) {
l := Sub("inter")
l.Info("original")
p := l.GetPrinter()
l.SetPrinter(func(w io.Writer, d *Ldata, l *Logger) {
d.Message += " intercepted"
p(w, d, l)
})
l.Info("original")
}
func BenchmarkStackSTD(b *testing.B) {
f := func() []byte {
buf := make([]byte, 1024)
for {
n := runtime.Stack(buf, false)
if n < len(buf) {
return buf[:n]
}
buf = make([]byte, 2*len(buf))
}
}
LEVEL = 15
l := Sub("StackSTD")
l.SetErrOutput(io.Discard)
l.SetOutput(io.Discard)
for i := 0; i < b.N; i++ {
l.Info(f())
}
}
func BenchmarkStackSTDStr(b *testing.B) {
LEVEL = 15
l := Sub("StackSTD")
l.SetErrOutput(io.Discard)
l.SetOutput(io.Discard)
for i := 0; i < b.N; i++ {
l.Info(Stack())
}
}
func BenchmarkStackCust(b *testing.B) {
LEVEL = 15
l := Sub("StackCust")
l.SetErrOutput(io.Discard)
l.SetOutput(io.Discard)
for i := 0; i < b.N; i++ {
l.Info(StackSkip(3))
}
}
func BenchmarkStackCustStr(b *testing.B) {
LEVEL = 15
l := Sub("StackCust")
l.SetErrOutput(io.Discard)
l.SetOutput(io.Discard)
for i := 0; i < b.N; i++ {
l.Info(string(StackSkip(3)))
}
}