From 15a9017e2e6c5352ebfa40bb7377d5af3e02fc47 Mon Sep 17 00:00:00 2001 From: Tai Groot Date: Thu, 8 Apr 2021 16:47:14 -0700 Subject: [PATCH] Adding tests, structuring data by client --- logger.go | 131 +++++++++++++++++++++++++++++++++++++++++++++++++ logger_test.go | 82 +++++++++++++++++++++++++++++++ main.go | 111 ----------------------------------------- structs.go | 15 ++++++ 4 files changed, 228 insertions(+), 111 deletions(-) create mode 100644 logger.go create mode 100644 logger_test.go delete mode 100644 main.go create mode 100644 structs.go diff --git a/logger.go b/logger.go new file mode 100644 index 0000000..b45edf0 --- /dev/null +++ b/logger.go @@ -0,0 +1,131 @@ +package lambo_log_socket + +import ( + "fmt" + "runtime" + "strings" + + "github.com/sirupsen/logrus" +) + +type Level int + +const ( + LTrace Level = iota + LDebug + LInfo + LWarn + LError + LPanic + LFatal +) + +var logger = logrus.New() +var clients []Client + +func init() { + stderrClient := CreateClient() + go stderrClient.logStdErr() + logger.SetLevel(logrus.DebugLevel) +} + +func (c *Client) logStdErr() { + select { + case entry := <-c.writer: + if c.LogLevel >= entry.level { + fmt.Println(entry.Output) + } + } +} + +func CreateClient() *Client { + var client Client + client.writer = make(LogWriter, 10) + clients = append(clients, client) + return &client +} + +func (c *Client) Destroy() error { + return nil +} + +func (c *Client) GetLogLevel() Level { + return c.LogLevel +} + +func createLog(e Entry) { + for _, c := range clients { + go func(c Client, e Entry) { + c.writer <- e + }(c, e) + } +} + +// SetLogLevel set log level of logger +func (c *Client) SetLogLevel(level Level) { + c.LogLevel = level +} + +// Trace prints out logs on trace level +func Trace(args ...interface{}) { + entry := logger.WithFields(logrus.Fields{}) + entry.Data["file"] = fileInfo(2) + entry.Debug(args...) +} + +// Debug prints out logs on debug level +func Debug(args ...interface{}) { + entry := logger.WithFields(logrus.Fields{}) + entry.Data["file"] = fileInfo(2) + entry.Debug(args...) +} + +// Info prints out logs on info level +func Info(args ...interface{}) { + entry := logger.WithFields(logrus.Fields{}) + entry.Data["file"] = fileInfo(2) + entry.Info(args...) +} + +// Warn prints out logs on warn level +func Warn(args ...interface{}) { + entry := logger.WithFields(logrus.Fields{}) + entry.Data["file"] = fileInfo(2) + entry.Warn(args...) +} + +// Error prints out logs on error level +func Error(args ...interface{}) { + entry := logger.WithFields(logrus.Fields{}) + entry.Data["file"] = fileInfo(2) + entry.Error(args...) +} + +// Fatal prints out logs on fatal level +func Fatal(args ...interface{}) { + entry := logger.WithFields(logrus.Fields{}) + entry.Data["file"] = fileInfo(2) + entry.Fatal(args...) +} + +// Panic prints out logs on panic level +func Panic(args ...interface{}) { + entry := logger.WithFields(logrus.Fields{}) + entry.Data["file"] = fileInfo(2) + entry.Panic(args...) +} + +// fileInfo for getting which line in which file +func fileInfo(skip int) string { + _, file, line, ok := runtime.Caller(skip) + if !ok { + file = "" + line = 1 + } else { + slash := strings.LastIndex(file, "/") + if slash >= 0 { + file = file[slash+1:] + } + } + return fmt.Sprintf("%s:%d", file, line) +} diff --git a/logger_test.go b/logger_test.go new file mode 100644 index 0000000..a3d4b08 --- /dev/null +++ b/logger_test.go @@ -0,0 +1,82 @@ +package lambo_log_socket + +import ( + "testing" +) + +// SetLogLevel set log level of logger +func TestSetLogLevel(t *testing.T) { + logLevels := [...]Level{LTrace, LDebug, LInfo, LWarn, LError, LPanic, LFatal} + var c Client + for _, x := range logLevels { + c.SetLogLevel(x) + if c.GetLogLevel() != x { + t.Errorf("Got logLevel %d, but expected %d", int(c.GetLogLevel()), int(x)) + } + } +} + +// Trace prints out logs on trace level +func TestTrace(t *testing.T) { + var c Client + c.SetLogLevel(LTrace) + // if logLevel >= LTrace { + // entry := logger.WithFields(logrus.Fields{}) + // entry.Data["file"] = fileInfo(2) + // entry.Debug(args...) + // } +} + +// Debug prints out logs on debug level +func TestDebug(t *testing.T) { + // if logLevel >= LDebug { + // entry := logger.WithFields(logrus.Fields{}) + // entry.Data["file"] = fileInfo(2) + // entry.Debug(args...) + // } +} + +// Info prints out logs on info level +func TestInfo(t *testing.T) { + // if logLevel >= LInfo { + // entry := logger.WithFields(logrus.Fields{}) + // entry.Data["file"] = fileInfo(2) + // entry.Info(args...) + // } +} + +// Warn prints out logs on warn level +func TestWarn(t *testing.T) { + // if logLevel >= LWarn { + // entry := logger.WithFields(logrus.Fields{}) + // entry.Data["file"] = fileInfo(2) + // entry.Warn(args...) + // } +} + +// Error prints out logs on error level +func TestError(t *testing.T) { + // if logLevel >= LError { + // entry := logger.WithFields(logrus.Fields{}) + // entry.Data["file"] = fileInfo(2) + // entry.Error(args...) + // } +} + +// Fatal prints out logs on fatal level +func TestFatal(t *testing.T) { + // if logLevel >= LFatal { + // entry := logger.WithFields(logrus.Fields{}) + // entry.Data["file"] = fileInfo(2) + // entry.Fatal(args...) + // } +} + +// Panic prints out logs on panic level +func TestPanic(t *testing.T) { + // if logLevel >= LPanic { + // entry := logger.WithFields(logrus.Fields{}) + // entry.Data["file"] = fileInfo(2) + // entry.Panic(args...) + // } +} diff --git a/main.go b/main.go deleted file mode 100644 index 96a295e..0000000 --- a/main.go +++ /dev/null @@ -1,111 +0,0 @@ -package lambo_log_socket - -import ( - "fmt" - "runtime" - "strings" - - "github.com/sirupsen/logrus" -) - -type Level int - -const ( - LTrace Level = iota - LDebug - LInfo - LWarn - LError - LPanic - LFatal -) - -var logLevel Level -var logger = logrus.New() - -func init() { - logger.SetLevel(logrus.DebugLevel) -} - -// SetLogLevel set log level of logger -func SetLogLevel(level Level) { - logLevel = level -} - -// Trace prints out logs on trace level -func Trace(args ...interface{}) { - if logLevel >= LTrace { - entry := logger.WithFields(logrus.Fields{}) - entry.Data["file"] = fileInfo(2) - entry.Debug(args...) - } -} - -// Debug prints out logs on debug level -func Debug(args ...interface{}) { - if logLevel >= LDebug { - entry := logger.WithFields(logrus.Fields{}) - entry.Data["file"] = fileInfo(2) - entry.Debug(args...) - } -} - -// Info prints out logs on info level -func Info(args ...interface{}) { - if logLevel >= LInfo { - entry := logger.WithFields(logrus.Fields{}) - entry.Data["file"] = fileInfo(2) - entry.Info(args...) - } -} - -// Warn prints out logs on warn level -func Warn(args ...interface{}) { - if logLevel >= LWarn { - entry := logger.WithFields(logrus.Fields{}) - entry.Data["file"] = fileInfo(2) - entry.Warn(args...) - } -} - -// Error prints out logs on error level -func Error(args ...interface{}) { - if logLevel >= LError { - entry := logger.WithFields(logrus.Fields{}) - entry.Data["file"] = fileInfo(2) - entry.Error(args...) - } -} - -// Fatal prints out logs on fatal level -func Fatal(args ...interface{}) { - if logLevel >= LFatal { - entry := logger.WithFields(logrus.Fields{}) - entry.Data["file"] = fileInfo(2) - entry.Fatal(args...) - } -} - -// Panic prints out logs on panic level -func Panic(args ...interface{}) { - if logLevel >= LPanic { - entry := logger.WithFields(logrus.Fields{}) - entry.Data["file"] = fileInfo(2) - entry.Panic(args...) - } -} - -// fileInfo for getting which line in which file -func fileInfo(skip int) string { - _, file, line, ok := runtime.Caller(skip) - if !ok { - file = "" - line = 1 - } else { - slash := strings.LastIndex(file, "/") - if slash >= 0 { - file = file[slash+1:] - } - } - return fmt.Sprintf("%s:%d", file, line) -} diff --git a/structs.go b/structs.go new file mode 100644 index 0000000..9e78809 --- /dev/null +++ b/structs.go @@ -0,0 +1,15 @@ +package lambo_log_socket + +type LogWriter chan Entry + +type Client struct { + LogLevel Level `json:"level"` + writer LogWriter +} + +type Entry struct { + Timestamp string `json:"timestamp"` + Output string `json:"output"` + Level string `json:"level"` + level Level +}