added more strategies
This commit is contained in:
@ -3,3 +3,5 @@
|
|||||||
u80864958_at_u80864958 = 979
|
u80864958_at_u80864958 = 979
|
||||||
[25-03-11]
|
[25-03-11]
|
||||||
schreifuchs_at_archibald = 195
|
schreifuchs_at_archibald = 195
|
||||||
|
[24-11-18]
|
||||||
|
u80864958_at_u80864958 = 3139
|
||||||
|
17
log_test.go
17
log_test.go
@ -3,6 +3,7 @@ package logger_test
|
|||||||
import (
|
import (
|
||||||
"sync"
|
"sync"
|
||||||
"testing"
|
"testing"
|
||||||
|
"time"
|
||||||
|
|
||||||
"git.schreifuchs.ch/schreifuchs/logger"
|
"git.schreifuchs.ch/schreifuchs/logger"
|
||||||
"git.schreifuchs.ch/schreifuchs/logger/lvl"
|
"git.schreifuchs.ch/schreifuchs/logger/lvl"
|
||||||
@ -27,5 +28,19 @@ func TestNewWith(t *testing.T) {
|
|||||||
if expected != got {
|
if expected != got {
|
||||||
t.Errorf("Expected %s but got %s", expected, got)
|
t.Errorf("Expected %s but got %s", expected, got)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func ExampleLog() {
|
||||||
|
log := logger.New(lvl.Debug)
|
||||||
|
log.Debug("Hello World")
|
||||||
|
log.Info("Hello World")
|
||||||
|
log.Warn("Hello World")
|
||||||
|
log.Error("Hello World")
|
||||||
|
time.Sleep(time.Second / 100)
|
||||||
|
|
||||||
|
// Output:
|
||||||
|
// Debug: Hello World
|
||||||
|
// Info: Hello World
|
||||||
|
// Warn: Hello World
|
||||||
|
// Error: Hello World
|
||||||
}
|
}
|
||||||
|
19
lvl/lvl.go
19
lvl/lvl.go
@ -22,23 +22,8 @@ func (l Level) String() string {
|
|||||||
return "Error"
|
return "Error"
|
||||||
}
|
}
|
||||||
return "Undefined"
|
return "Undefined"
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Colorize colors a string for the shell matching to its level
|
func (l Level) MarshalJSON() ([]byte, error) {
|
||||||
func (l Level) Colorize(str string) string {
|
return []byte("\"" + l.String() + "\""), nil
|
||||||
var color string
|
|
||||||
|
|
||||||
switch l {
|
|
||||||
case Debug:
|
|
||||||
color = "\033[32m" // green
|
|
||||||
case Info:
|
|
||||||
color = "\033[97m" // white
|
|
||||||
case Warn:
|
|
||||||
color = "\033[33m" // yellow
|
|
||||||
case Error:
|
|
||||||
color = "\033[31m" // red
|
|
||||||
}
|
|
||||||
return color + str + "\033[0m"
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -36,25 +36,38 @@ func TestString(t *testing.T) {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestColor(t *testing.T) {
|
func TestMarshalJSON(t *testing.T) {
|
||||||
testCases := []struct {
|
cases := []struct {
|
||||||
level Level
|
l Level
|
||||||
message string
|
e string
|
||||||
expected string
|
|
||||||
}{
|
}{
|
||||||
{Debug, "Debug message", "\033[32mDebug message\033[0m"},
|
{
|
||||||
{Info, "Info message", "\033[97mInfo message\033[0m"},
|
l: Debug,
|
||||||
{Warn, "Warning message", "\033[33mWarning message\033[0m"},
|
e: `"Debug"`,
|
||||||
{Error, "Error message", "\033[31mError message\033[0m"},
|
},
|
||||||
|
{
|
||||||
|
l: Info,
|
||||||
|
e: `"Info"`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
l: Warn,
|
||||||
|
e: `"Warn"`,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
l: Error,
|
||||||
|
e: `"Error"`,
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, tc := range testCases {
|
for _, c := range cases {
|
||||||
coloredMessage := tc.level.Colorize(tc.message)
|
t.Run(c.e, func(t *testing.T) {
|
||||||
if coloredMessage != tc.expected {
|
res, _ := c.l.MarshalJSON()
|
||||||
t.Errorf("For level %v, expected '%v', but got '%v'", tc.level, tc.expected, coloredMessage)
|
|
||||||
}
|
if string(res) != c.e {
|
||||||
|
t.Errorf("Expected %s but got %s", c.e, res)
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
// logger is a async logger
|
||||||
package logger
|
package logger
|
||||||
|
|
||||||
import (
|
import (
|
||||||
@ -18,21 +19,18 @@ type Logger struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func New(l lvl.Level) *Logger {
|
func New(l lvl.Level) *Logger {
|
||||||
|
|
||||||
c := make(chan *Log, 20)
|
c := make(chan *Log, 20)
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
for log := range c {
|
for log := range c {
|
||||||
fmt.Printf("%v: %s\n", log.Level, log.Message)
|
fmt.Printf("%v: %s\n", log.Level, log.Message)
|
||||||
}
|
}
|
||||||
|
|
||||||
}()
|
}()
|
||||||
|
|
||||||
return &Logger{
|
return &Logger{
|
||||||
Level: l,
|
Level: l,
|
||||||
LogChan: c,
|
LogChan: c,
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewWithStrategy(lvl lvl.Level, log func(<-chan *Log)) *Logger {
|
func NewWithStrategy(lvl lvl.Level, log func(<-chan *Log)) *Logger {
|
||||||
@ -44,5 +42,4 @@ func NewWithStrategy(lvl lvl.Level, log func(<-chan *Log)) *Logger {
|
|||||||
Level: lvl,
|
Level: lvl,
|
||||||
LogChan: c,
|
LogChan: c,
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
29
strategy/colored.go
Normal file
29
strategy/colored.go
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
package strategy
|
||||||
|
|
||||||
|
import (
|
||||||
|
"git.schreifuchs.ch/schreifuchs/logger"
|
||||||
|
"git.schreifuchs.ch/schreifuchs/logger/lvl"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Colored(logs <-chan *logger.Log) {
|
||||||
|
for log := range logs {
|
||||||
|
println(colorize(log.Level, log.Message))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// colorize colors a string for the shell matching to its level
|
||||||
|
func colorize(l lvl.Level, str string) string {
|
||||||
|
var color string
|
||||||
|
|
||||||
|
switch l {
|
||||||
|
case lvl.Debug:
|
||||||
|
color = "\033[32m" // green
|
||||||
|
case lvl.Info:
|
||||||
|
color = "\033[97m" // white
|
||||||
|
case lvl.Warn:
|
||||||
|
color = "\033[33m" // yellow
|
||||||
|
case lvl.Error:
|
||||||
|
color = "\033[31m" // red
|
||||||
|
}
|
||||||
|
return color + str + "\033[0m"
|
||||||
|
}
|
@ -1 +0,0 @@
|
|||||||
package strategy
|
|
57
strategy/json.go
Normal file
57
strategy/json.go
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
package strategy
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"git.schreifuchs.ch/schreifuchs/logger"
|
||||||
|
"git.schreifuchs.ch/schreifuchs/logger/lvl"
|
||||||
|
)
|
||||||
|
|
||||||
|
// JSON logs to std wit the schema:
|
||||||
|
// {"time":"","level":"","message":""}.
|
||||||
|
func JSON(logs <-chan *logger.Log) {
|
||||||
|
for log := range logs {
|
||||||
|
timedLog := struct {
|
||||||
|
Time time.Time `json:"time"`
|
||||||
|
LVL lvl.Level `json:"level"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
}{
|
||||||
|
Time: time.Now(),
|
||||||
|
LVL: log.Level,
|
||||||
|
Message: log.Message,
|
||||||
|
}
|
||||||
|
|
||||||
|
out, err := json.Marshal(timedLog)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error while marshaling log: ", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
println(string(out))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// JSON logs to std wit the schema:
|
||||||
|
// {"time":"","level":"","message":""}.
|
||||||
|
func JSON(logs <-chan *logger.Log) {
|
||||||
|
for log := range logs {
|
||||||
|
timedLog := struct {
|
||||||
|
Time time.Time `json:"time"`
|
||||||
|
LVL lvl.Level `json:"level"`
|
||||||
|
Message string `json:"message"`
|
||||||
|
}{
|
||||||
|
Time: time.Now(),
|
||||||
|
LVL: log.Level,
|
||||||
|
Message: log.Message,
|
||||||
|
}
|
||||||
|
|
||||||
|
out, err := json.Marshal(timedLog)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println("Error while marshaling log: ", err)
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
println(string(out))
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user