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:
parent
cbd4896d05
commit
15a9017e2e
131
logger.go
Normal file
131
logger.go
Normal 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
82
logger_test.go
Normal 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
111
main.go
@ -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
15
structs.go
Normal 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
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user