new logger

This commit is contained in:
Jason
2019-08-14 23:15:41 +08:00
parent 9202b8f53b
commit ffc980f2c0
5 changed files with 106 additions and 138 deletions

View File

@@ -1,63 +0,0 @@
package log
import (
"net"
"strconv"
"github.com/xjasonlyu/tun2socks/common/lsof"
)
var logger Logger
func RegisterLogger(l Logger) {
logger = l
}
func SetLevel(level Level) {
if logger != nil {
logger.SetLevel(level)
}
}
func Debugf(msg string, args ...interface{}) {
if logger != nil {
logger.Debugf(msg, args...)
}
}
func Infof(msg string, args ...interface{}) {
if logger != nil {
logger.Infof(msg, args...)
}
}
func Warnf(msg string, args ...interface{}) {
if logger != nil {
logger.Warnf(msg, args...)
}
}
func Errorf(msg string, args ...interface{}) {
if logger != nil {
logger.Errorf(msg, args...)
}
}
func Fatalf(msg string, args ...interface{}) {
if logger != nil {
logger.Fatalf(msg, args...)
}
}
func Access(process, outbound, network, localAddr, target string) {
var err error
if process == "" {
localHost, localPortStr, _ := net.SplitHostPort(localAddr)
localPortInt, _ := strconv.Atoi(localPortStr)
process, err = lsof.GetCommandNameBySocket(network, localHost, uint16(localPortInt))
if err != nil {
process = "unknown process"
}
}
Infof("[%v] [%v] [%v] %s", outbound, network, process, target)
}

View File

@@ -1,20 +0,0 @@
package log
type Level uint8
const (
DEBUG Level = iota
INFO
WARNING
ERROR
SILENT
)
type Logger interface {
SetLevel(level Level)
Debugf(msg string, args ...interface{})
Infof(msg string, args ...interface{})
Warnf(msg string, args ...interface{})
Errorf(msg string, args ...interface{})
Fatalf(msg string, args ...interface{})
}

View File

@@ -1,55 +0,0 @@
package simple
import (
goLog "log"
"github.com/xjasonlyu/tun2socks/common/log"
)
func init() {
log.RegisterLogger(NewSimpleLogger())
}
type simpleLogger struct {
level log.Level
}
func NewSimpleLogger() log.Logger {
return &simpleLogger{log.INFO}
}
func (l *simpleLogger) SetLevel(level log.Level) {
l.level = level
}
func (l *simpleLogger) Debugf(msg string, args ...interface{}) {
if l.level <= log.DEBUG {
l.output(msg, args...)
}
}
func (l *simpleLogger) Infof(msg string, args ...interface{}) {
if l.level <= log.INFO {
l.output(msg, args...)
}
}
func (l *simpleLogger) Warnf(msg string, args ...interface{}) {
if l.level <= log.WARNING {
l.output(msg, args...)
}
}
func (l *simpleLogger) Errorf(msg string, args ...interface{}) {
if l.level <= log.ERROR {
l.output(msg, args...)
}
}
func (l *simpleLogger) Fatalf(msg string, args ...interface{}) {
goLog.Fatalf(msg, args...)
}
func (l *simpleLogger) output(msg string, args ...interface{}) {
goLog.Printf(msg, args...)
}

28
log/level.go Normal file
View File

@@ -0,0 +1,28 @@
package log
const (
DEBUG Level = iota
INFO
WARNING
ERROR
SILENT
)
type Level int
func (l Level) String() string {
switch l {
case INFO:
return "info"
case WARNING:
return "warning"
case ERROR:
return "error"
case DEBUG:
return "debug"
case SILENT:
return "silent"
default:
return "unknown"
}
}

78
log/log.go Normal file
View File

@@ -0,0 +1,78 @@
package log
import (
"fmt"
"os"
log "github.com/sirupsen/logrus"
)
var (
level = INFO
)
func init() {
log.SetOutput(os.Stdout)
log.SetLevel(log.DebugLevel)
}
type Event struct {
LogLevel Level
Payload string
}
func (e *Event) Type() string {
return e.LogLevel.String()
}
func Infof(format string, v ...interface{}) {
event := newLog(INFO, format, v...)
printf(event)
}
func Warnf(format string, v ...interface{}) {
event := newLog(WARNING, format, v...)
printf(event)
}
func Errorf(format string, v ...interface{}) {
event := newLog(ERROR, format, v...)
printf(event)
}
func Debugf(format string, v ...interface{}) {
event := newLog(DEBUG, format, v...)
printf(event)
}
func Fatalf(format string, v ...interface{}) {
log.Fatalf(format, v...)
}
func SetLevel(newLevel Level) {
level = newLevel
}
func printf(data *Event) {
if data.LogLevel < level {
return
}
switch data.LogLevel {
case INFO:
log.Infoln(data.Payload)
case WARNING:
log.Warnln(data.Payload)
case ERROR:
log.Errorln(data.Payload)
case DEBUG:
log.Debugln(data.Payload)
}
}
func newLog(logLevel Level, format string, v ...interface{}) *Event {
return &Event{
LogLevel: logLevel,
Payload: fmt.Sprintf(format, v...),
}
}