add logtr.sosf for sos straight to specific matrix
This commit is contained in:
33
logtr/log.go
33
logtr/log.go
@@ -5,6 +5,7 @@ import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"strings"
|
||||
"sync"
|
||||
@@ -18,8 +19,13 @@ const (
|
||||
DEBUG = Level(8)
|
||||
INFO = Level(9)
|
||||
ERROR = Level(10)
|
||||
SOS = Level(15)
|
||||
)
|
||||
|
||||
type SOSer interface {
|
||||
Send(string) error
|
||||
}
|
||||
|
||||
func (l Level) MarshalJSON() ([]byte, error) {
|
||||
return json.Marshal(l.String())
|
||||
}
|
||||
@@ -34,7 +40,7 @@ func (l *Level) UnmarshalJSON(b []byte) error {
|
||||
if len(s) > 3 {
|
||||
s = s[:3]
|
||||
}
|
||||
for i := 0; i < int(ERROR)+5; i++ {
|
||||
for i := 0; i < int(SOS)+5; i++ {
|
||||
l2 := Level(i)
|
||||
if l2.String() == s {
|
||||
*l = l2
|
||||
@@ -48,6 +54,7 @@ var logger io.Writer = os.Stderr
|
||||
var loggerPath string = ""
|
||||
var lock = &sync.Mutex{}
|
||||
var level Level = INFO
|
||||
var ansoser SOSer = nil
|
||||
|
||||
func SetLogpath(p string) {
|
||||
lock.Lock()
|
||||
@@ -63,18 +70,34 @@ func SetLogpath(p string) {
|
||||
loggerPath = p
|
||||
}
|
||||
|
||||
func SetSOSer(another SOSer) {
|
||||
lock.Lock()
|
||||
defer lock.Unlock()
|
||||
ansoser = another
|
||||
}
|
||||
|
||||
func SetLevel(l Level) {
|
||||
lock.Lock()
|
||||
defer lock.Unlock()
|
||||
level = l
|
||||
}
|
||||
|
||||
func logf(l Level, format string, args []interface{}) {
|
||||
format = fmt.Sprintf("%v: %v: %s\n", time.Now().Format("15:04:05"), l.String(), strings.TrimSpace(format))
|
||||
lock.Lock()
|
||||
defer lock.Unlock()
|
||||
if level <= l {
|
||||
cLevel := level
|
||||
cAnsoser := ansoser
|
||||
if l >= cLevel {
|
||||
fmt.Fprintf(os.Stderr, format, args...)
|
||||
}
|
||||
fmt.Fprintf(logger, format, args...)
|
||||
log.Printf("l==sos=%v, ansoser!=nil=%v", l == SOS, ansoser != nil)
|
||||
if l == SOS && cAnsoser != nil {
|
||||
cAnsoser.Send(fmt.Sprintf(format, args...))
|
||||
}
|
||||
}
|
||||
|
||||
func SOSf(format string, args ...interface{}) {
|
||||
logf(SOS, format, args)
|
||||
}
|
||||
|
||||
func Infof(format string, args ...interface{}) {
|
||||
@@ -107,6 +130,8 @@ func (l Level) String() string {
|
||||
return "DEB"
|
||||
case VERBOSE:
|
||||
return "VER"
|
||||
case SOS:
|
||||
return "SOS"
|
||||
default:
|
||||
return "?"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user