Improve: add log level

This commit is contained in:
Dreamacro 2018-06-22 13:15:20 +08:00
parent 9c2ace1f91
commit 018a6ba041
3 changed files with 46 additions and 16 deletions

View file

@ -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,

View file

@ -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...),
}
}

View file

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