From eba8c2d4a656e1c59cde8da0db6adf8943168b9f Mon Sep 17 00:00:00 2001 From: Bo-Yi Wu Date: Wed, 5 Feb 2020 16:57:55 +0800 Subject: [PATCH] chore(log): ignore /healthz request log (#464) * chore(log): ignore /healthz request log Add zerolog for gin httpd log fixed: https://github.com/appleboy/gorush/issues/435 Signed-off-by: Bo-Yi Wu * remove variable Signed-off-by: Bo-Yi Wu --- docker-compose.yml | 2 +- go.mod | 2 ++ go.sum | 14 +++++++++ gorush/log.go | 74 ++++++++-------------------------------------- gorush/server.go | 31 +++++++++++++++++-- 5 files changed, 58 insertions(+), 65 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 4af2909..c11303a 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,7 +5,7 @@ services: image: appleboy/gorush restart: always ports: - - "8080:8080" + - "8088:8088" - "9000:9000" logging: options: diff --git a/go.mod b/go.mod index c7c8f30..2177f4f 100644 --- a/go.mod +++ b/go.mod @@ -17,6 +17,7 @@ require ( github.com/cespare/xxhash/v2 v2.1.1 // indirect github.com/dgraph-io/badger v1.6.0 github.com/dgryski/go-farm v0.0.0-20191112170834-c2139c5d712b // indirect + github.com/gin-contrib/logger v0.0.2 github.com/gin-gonic/gin v1.5.0 github.com/go-playground/universal-translator v0.17.0 // indirect github.com/golang/protobuf v1.3.2 @@ -30,6 +31,7 @@ require ( github.com/prometheus/client_golang v1.2.1 github.com/prometheus/client_model v0.0.0-20191202183732-d1d2010b5bee // indirect github.com/prometheus/procfs v0.0.8 // indirect + github.com/rs/zerolog v1.16.0 github.com/sideshow/apns2 v0.20.0 github.com/sirupsen/logrus v1.4.2 github.com/spf13/afero v1.2.2 // indirect diff --git a/go.sum b/go.sum index 898c8fe..1536928 100644 --- a/go.sum +++ b/go.sum @@ -73,8 +73,12 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fukata/golang-stats-api-handler v1.0.0 h1:N6M25vhs1yAvwGBpFY6oBmMOZeJdcWnvA+wej8pKeko= github.com/fukata/golang-stats-api-handler v1.0.0/go.mod h1:1sIi4/rHq6s/ednWMZqTmRq3765qTUSs/c3xF6lj8J8= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gin-contrib/logger v0.0.2 h1:qT6qOR9/mp9hrHAgTEVxpjvS3anQtiUTtzJhf+NlBQM= +github.com/gin-contrib/logger v0.0.2/go.mod h1:Eca5g93bobBwWSNeuLdTqRvNK6btb3XSHdU9ePZ+toM= +github.com/gin-contrib/sse v0.0.0-20190301062529-5545eab6dad3/go.mod h1:VJ0WA2NBN22VlZ2dKZQPAPnyWw5XTlK1KymzLKsr59s= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= github.com/gin-gonic/gin v1.5.0 h1:fi+bqFAx/oLK54somfCtEZs9HeH1LHVoEPUgARpTqyc= github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= @@ -147,6 +151,7 @@ github.com/magiconair/properties v1.8.0 h1:LLgXmsheXeRoUOBOjtwPQCWIYqM/LU1ayDtDe github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.1 h1:ZC2Vc7/ZFkGmsVC9KvOjumD+G5lXy2RtTKyzRKO2BQ4= github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= +github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.9/go.mod h1:YNRxwqDuOph6SZLI9vUUz6OYw3QyUt7WiY2yME+cCiQ= github.com/mattn/go-isatty v0.0.10 h1:qxFzApOv4WsAL965uUPIsXzAKCZxN2p9UqdhFS4ZW10= github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= @@ -204,6 +209,9 @@ github.com/prometheus/procfs v0.0.8 h1:+fpWZdT24pJBiqJdAwYBjPSk+5YmQzYNPYzQsdzLk github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= +github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= +github.com/rs/zerolog v1.16.0 h1:AaELmZdcJHT8m6oZ5py4213cdFK8XGXkB3dFdAQ+P7Q= +github.com/rs/zerolog v1.16.0/go.mod h1:9nvC1axdVrAHcu/s9taAVfBuIdTZLVQmKQyvrUjF5+I= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= @@ -277,6 +285,7 @@ github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaU github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= go.etcd.io/bbolt v1.3.2 h1:Z/90sZLPOeCy2PwprqkFa25PdkusRzaj9P8zm/KNyvk= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk= @@ -301,6 +310,7 @@ golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI= @@ -322,6 +332,7 @@ golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb h1:fgwFCsaw9buMuxNd6+DQfAuSFqbNiQZpcgJQAgJsK6k= @@ -342,6 +353,8 @@ golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190828213141-aed303cbaa74/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0 h1:igQkv0AAhEIvTEpD5LIpAfav2eeVO9HBTjvKHVJPRSs= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508= @@ -364,6 +377,7 @@ gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/go-playground/assert.v1 v1.2.1 h1:xoYuJVE7KT85PYWrN730RguIQO0ePzVRfFMXadIrXTM= gopkg.in/go-playground/assert.v1 v1.2.1/go.mod h1:9RXL0bg/zibRAgZUYszZSwO/z8Y/a8bDuhia5mkpMnE= +gopkg.in/go-playground/validator.v8 v8.18.2/go.mod h1:RX2a/7Ha8BgOhfk7j780h4/u/RRjR0eouCJSH80/M2Y= gopkg.in/go-playground/validator.v9 v9.29.1 h1:SvGtYmN60a5CVKTOzMSyfzWDeZRxRuGvRQyEAKbw1xc= gopkg.in/go-playground/validator.v9 v9.29.1/go.mod h1:+c9/zcJMFNgbLvly1L1V+PpxWdVbfP1avr/N00E2vyQ= gopkg.in/go-playground/validator.v9 v9.30.2 h1:icxYLlYflpazIV3ufMoNB9h9SYMQ37DZ8CTwkU4pnOs= diff --git a/gorush/log.go b/gorush/log.go index d8f06d5..d333071 100644 --- a/gorush/log.go +++ b/gorush/log.go @@ -7,7 +7,6 @@ import ( "os" "strings" - "github.com/gin-gonic/gin" "github.com/mattn/go-isatty" "github.com/sirupsen/logrus" ) @@ -23,15 +22,6 @@ var ( reset = string([]byte{27, 91, 48, 109}) ) -// LogReq is http request log -type LogReq struct { - URI string `json:"uri"` - Method string `json:"method"` - IP string `json:"ip"` - ContentType string `json:"content_type"` - Agent string `json:"agent"` -} - // LogPushEntry is push response log type LogPushEntry struct { ID string `json:"notif_id,omitempty"` @@ -57,14 +47,19 @@ func InitLog() error { LogAccess = logrus.New() LogError = logrus.New() - LogAccess.Formatter = &logrus.TextFormatter{ - TimestampFormat: "2006/01/02 - 15:04:05", - FullTimestamp: true, - } + if !isTerm { + LogAccess.SetFormatter(&logrus.JSONFormatter{}) + LogError.SetFormatter(&logrus.JSONFormatter{}) + } else { + LogAccess.Formatter = &logrus.TextFormatter{ + TimestampFormat: "2006/01/02 - 15:04:05", + FullTimestamp: true, + } - LogError.Formatter = &logrus.TextFormatter{ - TimestampFormat: "2006/01/02 - 15:04:05", - FullTimestamp: true, + LogError.Formatter = &logrus.TextFormatter{ + TimestampFormat: "2006/01/02 - 15:04:05", + FullTimestamp: true, + } } // set logger @@ -121,43 +116,6 @@ func SetLogLevel(log *logrus.Logger, levelString string) error { return nil } -// LogRequest record http request -func LogRequest(uri string, method string, ip string, contentType string, agent string) { - var output string - log := &LogReq{ - URI: uri, - Method: method, - IP: ip, - ContentType: contentType, - Agent: agent, - } - - if PushConf.Log.Format == "json" { - logJSON, _ := json.Marshal(log) - - output = string(logJSON) - } else { - var headerColor, resetColor string - - if isTerm { - headerColor = magenta - resetColor = reset - } - - // format is string - output = fmt.Sprintf("|%s header %s| %s %s %s %s %s", - headerColor, resetColor, - log.Method, - log.URI, - log.IP, - log.ContentType, - log.Agent, - ) - } - - LogAccess.Info(output) -} - func colorForPlatForm(platform int) string { switch platform { case PlatFormIos: @@ -272,11 +230,3 @@ func LogPush(status, token string, req PushNotification, errPush error) { LogError.Error(output) } } - -// LogMiddleware provide gin router handler. -func LogMiddleware() gin.HandlerFunc { - return func(c *gin.Context) { - LogRequest(c.Request.URL.Path, c.Request.Method, c.ClientIP(), c.ContentType(), c.GetHeader("User-Agent")) - c.Next() - } -} diff --git a/gorush/server.go b/gorush/server.go index 2164864..56f754c 100644 --- a/gorush/server.go +++ b/gorush/server.go @@ -5,15 +5,24 @@ import ( "crypto/tls" "fmt" "net/http" + "os" + "regexp" api "github.com/appleboy/gin-status-api" + "github.com/gin-contrib/logger" "github.com/gin-gonic/gin" "github.com/gin-gonic/gin/binding" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" + "github.com/rs/zerolog" + "github.com/rs/zerolog/log" "golang.org/x/crypto/acme/autocert" ) +var ( + rxURL = regexp.MustCompile(`^/healthz$`) +) + func init() { // Support metrics m := NewMetrics() @@ -113,16 +122,34 @@ func autoTLSServer() *http.Server { } func routerEngine() *gin.Engine { + zerolog.SetGlobalLevel(zerolog.InfoLevel) + if PushConf.Core.Mode == "debug" { + zerolog.SetGlobalLevel(zerolog.DebugLevel) + } + + log.Logger = zerolog.New(os.Stdout).With().Timestamp().Logger() + + if isTerm { + log.Logger = log.Output( + zerolog.ConsoleWriter{ + Out: os.Stdout, + NoColor: false, + }, + ) + } + // set server mode gin.SetMode(PushConf.Core.Mode) r := gin.New() // Global middleware - r.Use(gin.Logger()) + r.Use(logger.SetLogger(logger.Config{ + UTC: true, + SkipPathRegexp: rxURL, + })) r.Use(gin.Recovery()) r.Use(VersionMiddleware()) - r.Use(LogMiddleware()) r.Use(StatMiddleware()) r.GET(PushConf.API.StatGoURI, api.GinHandler)