1
0
mirror of https://github.com/taigrr/log-socket synced 2025-01-18 04:53:14 -08:00

Adding tests, structuring data by client

This commit is contained in:
Tai Groot 2021-04-08 16:47:14 -07:00
parent cbd4896d05
commit 15a9017e2e
Signed by: taigrr
GPG Key ID: D00C269A87614812
4 changed files with 228 additions and 111 deletions

131
logger.go Normal file
View File

@ -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)
}

82
logger_test.go Normal file
View File

@ -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...)
// }
}

111
main.go
View File

@ -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)
}

15
structs.go Normal file
View File

@ -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
}