mirror of
https://gitclone.com/github.com/MetaCubeX/Clash.Meta
synced 2024-11-14 21:31:16 +08:00
Improve: add log level
This commit is contained in:
parent
9c2ace1f91
commit
018a6ba041
@ -21,11 +21,6 @@ type Traffic struct {
|
||||
Down int64 `json:"down"`
|
||||
}
|
||||
|
||||
type Log struct {
|
||||
Type string `json:"type"`
|
||||
Payload string `json:"payload"`
|
||||
}
|
||||
|
||||
type Error struct {
|
||||
Error string `json:"error"`
|
||||
}
|
||||
@ -60,7 +55,38 @@ func traffic(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
}
|
||||
|
||||
type GetLogs struct {
|
||||
Level string `json:"level"`
|
||||
}
|
||||
|
||||
type Log struct {
|
||||
Type string `json:"type"`
|
||||
Payload string `json:"payload"`
|
||||
}
|
||||
|
||||
func getLogs(w http.ResponseWriter, r *http.Request) {
|
||||
req := &GetLogs{}
|
||||
render.DecodeJSON(r.Body, req)
|
||||
if req.Level == "" {
|
||||
req.Level = "info"
|
||||
}
|
||||
|
||||
mapping := map[string]tunnel.LogLevel{
|
||||
"info": tunnel.INFO,
|
||||
"debug": tunnel.DEBUG,
|
||||
"error": tunnel.ERROR,
|
||||
"warning": tunnel.WARNING,
|
||||
}
|
||||
|
||||
level, ok := mapping[req.Level]
|
||||
if !ok {
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
render.JSON(w, r, Error{
|
||||
Error: "Level error",
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
src := tun.Log()
|
||||
sub, err := src.Subscribe()
|
||||
defer src.UnSubscribe(sub)
|
||||
@ -74,6 +100,10 @@ func getLogs(w http.ResponseWriter, r *http.Request) {
|
||||
render.Status(r, http.StatusOK)
|
||||
for elm := range sub {
|
||||
log := elm.(tunnel.Log)
|
||||
if log.LogLevel > level {
|
||||
continue
|
||||
}
|
||||
|
||||
if err := json.NewEncoder(w).Encode(Log{
|
||||
Type: log.Type(),
|
||||
Payload: log.Payload,
|
||||
|
@ -7,21 +7,21 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
INFO LogType = iota
|
||||
ERROR LogLevel = iota
|
||||
WARNING
|
||||
ERROR
|
||||
INFO
|
||||
DEBUG
|
||||
)
|
||||
|
||||
type LogType int
|
||||
type LogLevel int
|
||||
|
||||
type Log struct {
|
||||
LogType LogType
|
||||
LogLevel LogLevel
|
||||
Payload string
|
||||
}
|
||||
|
||||
func (l *Log) Type() string {
|
||||
switch l.LogType {
|
||||
switch l.LogLevel {
|
||||
case INFO:
|
||||
return "Info"
|
||||
case WARNING:
|
||||
@ -36,7 +36,7 @@ func (l *Log) Type() string {
|
||||
}
|
||||
|
||||
func print(data Log) {
|
||||
switch data.LogType {
|
||||
switch data.LogLevel {
|
||||
case INFO:
|
||||
log.Infoln(data.Payload)
|
||||
case WARNING:
|
||||
@ -59,9 +59,9 @@ func (t *Tunnel) subscribeLogs() {
|
||||
}
|
||||
}
|
||||
|
||||
func newLog(logType LogType, format string, v ...interface{}) Log {
|
||||
func newLog(logLevel LogLevel, format string, v ...interface{}) Log {
|
||||
return Log{
|
||||
LogType: logType,
|
||||
LogLevel: logLevel,
|
||||
Payload: fmt.Sprintf(format, v...),
|
||||
}
|
||||
}
|
||||
|
@ -184,7 +184,7 @@ func (t *Tunnel) match(addr *C.Addr) C.Proxy {
|
||||
if !ok {
|
||||
continue
|
||||
}
|
||||
t.logCh <- newLog(INFO, "%v match %d using %s", addr.String(), rule.RuleType(), rule.Adapter())
|
||||
t.logCh <- newLog(INFO, "%v match %s using %s", addr.String(), rule.RuleType().String(), rule.Adapter())
|
||||
return a
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user