mirror of
https://github.com/netfun2000/rttys_zhaojh329.git
synced 2026-02-27 09:53:24 +08:00
a0bfc21d11
To solve a major problem: when there are many devices connected, the broker will blocked in processing messages. By the way, I've rewritten and reorganized the entire code architecture, improved performance. Some new features has been added: * support device grouping. * support show device's IP address. Change-Id: I250e18091be7fd42028c82767b6edef50b3f6d8f Signed-off-by: Jianhui Zhao <zhaojh329@gmail.com>
74 lines
1.4 KiB
Go
74 lines
1.4 KiB
Go
package log
|
|
|
|
import (
|
|
"os"
|
|
"path/filepath"
|
|
"runtime"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/dwdcth/consoleEx"
|
|
"github.com/mattn/go-colorable"
|
|
"github.com/rs/zerolog"
|
|
"github.com/rs/zerolog/log"
|
|
"golang.org/x/term"
|
|
)
|
|
|
|
type logFileHook struct {
|
|
err error
|
|
path string
|
|
}
|
|
|
|
var logFile = &logFileHook{}
|
|
|
|
func (h *logFileHook) Run(e *zerolog.Event, level zerolog.Level, msg string) {
|
|
if h.err != nil {
|
|
return
|
|
}
|
|
|
|
f, err := os.OpenFile(h.path, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)
|
|
if err != nil {
|
|
h.err = err
|
|
log.Fatal().Msg(err.Error())
|
|
return
|
|
}
|
|
defer f.Close()
|
|
|
|
f.WriteString(zerolog.TimestampFunc().Format(zerolog.TimeFieldFormat) + " |")
|
|
f.WriteString(strings.ToUpper(level.String()) + "| ")
|
|
|
|
pc, file, line, ok := runtime.Caller(3)
|
|
if ok {
|
|
f.WriteString(zerolog.CallerMarshalFunc(pc, file, line) + " |")
|
|
}
|
|
|
|
f.WriteString(msg)
|
|
f.WriteString("\n")
|
|
}
|
|
|
|
func init() {
|
|
zerolog.CallerMarshalFunc = func(pc uintptr, file string, line int) string {
|
|
return filepath.Base(file) + ":" + strconv.Itoa(line)
|
|
}
|
|
|
|
out := consoleEx.ConsoleWriterEx{Out: colorable.NewColorableStdout()}
|
|
logger := zerolog.New(out).With().Timestamp().Logger()
|
|
|
|
if !term.IsTerminal(int(os.Stdout.Fd())) {
|
|
logger = logger.Hook(logFile)
|
|
}
|
|
|
|
log.Logger = logger
|
|
|
|
zerolog.SetGlobalLevel(zerolog.InfoLevel)
|
|
}
|
|
|
|
// SetPath set the log file path
|
|
func SetPath(path string) {
|
|
logFile.path = path
|
|
}
|
|
|
|
func Verbose() {
|
|
log.Logger = log.Logger.With().Caller().Logger()
|
|
}
|