add logtr.sosf for sos straight to specific matrix

This commit is contained in:
bel
2022-01-17 18:40:31 -07:00
parent 73ccc22fd5
commit a38a627f5a
6 changed files with 73 additions and 24 deletions

View File

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