mirror of
https://github.com/taigrr/log-socket
synced 2025-01-18 04:53:14 -08:00
132 lines
2.5 KiB
Go
132 lines
2.5 KiB
Go
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)
|
|
}
|