diff options
author | 2022-07-19 09:47:55 +0100 | |
---|---|---|
committer | 2022-07-19 10:47:55 +0200 | |
commit | 098dbe6ff4f59652181c8e0e3873fbfcf0e65ea3 (patch) | |
tree | 17036ad9db68c3080e1e91279c8bce9f9ea6e5c3 /internal/router | |
parent | [bugfix] Markdown format fixes (#718) (diff) | |
download | gotosocial-098dbe6ff4f59652181c8e0e3873fbfcf0e65ea3.tar.xz |
[chore] use our own logging implementation (#716)
* first commit
Signed-off-by: kim <grufwub@gmail.com>
* replace logging with our own log library
Signed-off-by: kim <grufwub@gmail.com>
* fix imports
Signed-off-by: kim <grufwub@gmail.com>
* fix log imports
Signed-off-by: kim <grufwub@gmail.com>
* add license text
Signed-off-by: kim <grufwub@gmail.com>
* fix package import cycle between config and log package
Signed-off-by: kim <grufwub@gmail.com>
* fix empty kv.Fields{} being passed to WithFields()
Signed-off-by: kim <grufwub@gmail.com>
* fix uses of log.WithFields() with whitespace issues and empty slices
Signed-off-by: kim <grufwub@gmail.com>
* *linter related grumbling*
Signed-off-by: kim <grufwub@gmail.com>
* gofmt the codebase! also fix more log.WithFields() formatting issues
Signed-off-by: kim <grufwub@gmail.com>
* update testrig code to match new changes
Signed-off-by: kim <grufwub@gmail.com>
* fix error wrapping in non fmt.Errorf function
Signed-off-by: kim <grufwub@gmail.com>
* add benchmarking of log.Caller() vs non-cached
Signed-off-by: kim <grufwub@gmail.com>
* fix syslog tests, add standard build tags to test runner to ensure consistency
Signed-off-by: kim <grufwub@gmail.com>
* make syslog tests more robust
Signed-off-by: kim <grufwub@gmail.com>
* fix caller depth arithmatic (is that how you spell it?)
Signed-off-by: kim <grufwub@gmail.com>
* update to use unkeyed fields in kv.Field{} instances
Signed-off-by: kim <grufwub@gmail.com>
* update go-kv library
Signed-off-by: kim <grufwub@gmail.com>
* update libraries list
Signed-off-by: kim <grufwub@gmail.com>
* fuck you linter get nerfed
Signed-off-by: kim <grufwub@gmail.com>
Co-authored-by: tobi <31960611+tsmethurst@users.noreply.github.com>
Diffstat (limited to 'internal/router')
-rw-r--r-- | internal/router/logger.go | 44 | ||||
-rw-r--r-- | internal/router/router.go | 12 | ||||
-rw-r--r-- | internal/router/session.go | 4 |
3 files changed, 34 insertions, 26 deletions
diff --git a/internal/router/logger.go b/internal/router/logger.go index 692a616a4..2e23b9cfb 100644 --- a/internal/router/logger.go +++ b/internal/router/logger.go @@ -21,19 +21,20 @@ package router import ( "fmt" "net/http" - "os" "time" "codeberg.org/gruf/go-bytesize" "codeberg.org/gruf/go-errors/v2" + "codeberg.org/gruf/go-kv" + "codeberg.org/gruf/go-logger/v2/level" "github.com/gin-gonic/gin" - "github.com/sirupsen/logrus" + "github.com/superseriousbusiness/gotosocial/internal/log" ) // loggingMiddleware provides a request logging and panic recovery gin handler. func loggingMiddleware(c *gin.Context) { // Initialize the logging fields - fields := make(logrus.Fields, 7) + fields := make(kv.Fields, 6, 7) // Determine pre-handler time before := time.Now() @@ -49,11 +50,12 @@ func loggingMiddleware(c *gin.Context) { } // Append panic information to the request ctx - _ = c.Error(fmt.Errorf("recovered panic: %v", r)) + err := fmt.Errorf("recovered panic: %v", r) + _ = c.Error(err) - // Dump a stacktrace to stderr + // Dump a stacktrace to error log callers := errors.GetCallers(3, 10) - fmt.Fprintf(os.Stderr, "recovered panic: %v\n%s", r, callers) + log.WithField("stacktrace", callers).Error(err) } // NOTE: @@ -63,32 +65,38 @@ func loggingMiddleware(c *gin.Context) { // and could lead to storing plaintext API keys in logs // Set request logging fields - fields["latency"] = time.Since(before) - fields["clientIP"] = c.ClientIP() - fields["userAgent"] = c.Request.UserAgent() - fields["method"] = c.Request.Method - fields["statusCode"] = code - fields["path"] = path + fields[0] = kv.Field{"latency", time.Since(before)} + fields[1] = kv.Field{"clientIP", c.ClientIP()} + fields[2] = kv.Field{"userAgent", c.Request.UserAgent()} + fields[3] = kv.Field{"method", c.Request.Method} + fields[4] = kv.Field{"statusCode", code} + fields[5] = kv.Field{"path", path} - // Create a log entry with fields - l := logrus.WithFields(fields) - l.Level = logrus.InfoLevel + var lvl level.LEVEL + + // Default is info + lvl = level.INFO if code >= 500 { // This is a server error - l.Level = logrus.ErrorLevel + lvl = level.ERROR if len(c.Errors) > 0 { // Add an error string log field - fields["error"] = c.Errors.String() + fields = append(fields, kv.Field{ + "error", c.Errors.String(), + }) } } // Generate a nicer looking bytecount size := bytesize.Size(c.Writer.Size()) + // Create log entry with fields + l := log.WithFields(fields...) + // Finally, write log entry with status text body size - l.Logf(l.Level, "%s: wrote %s", http.StatusText(code), size) + l.Logf(lvl, "%s: wrote %s", http.StatusText(code), size) }() // Process request diff --git a/internal/router/router.go b/internal/router/router.go index 5eb4cb222..da00b685d 100644 --- a/internal/router/router.go +++ b/internal/router/router.go @@ -26,9 +26,9 @@ import ( "codeberg.org/gruf/go-debug" "github.com/gin-gonic/gin" - "github.com/sirupsen/logrus" "github.com/superseriousbusiness/gotosocial/internal/config" "github.com/superseriousbusiness/gotosocial/internal/db" + "github.com/superseriousbusiness/gotosocial/internal/log" "golang.org/x/crypto/acme/autocert" ) @@ -94,10 +94,10 @@ func (r *router) Start() { ) // Start the LetsEncrypt autocert manager HTTP server. - logrus.Infof("letsencrypt listening on %s", srv.Addr) + log.Infof("letsencrypt listening on %s", srv.Addr) if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { - logrus.Fatalf("letsencrypt: listen: %s", err) + log.Fatalf("letsencrypt: listen: %s", err) } }() @@ -112,16 +112,16 @@ func (r *router) Start() { r.srv.Handler = debug.WithPprof(r.srv.Handler) if debug.DEBUG() { // Profiling requires timeouts longer than 30s, so reset these. - logrus.Warn("resetting http.Server{} timeout to support profiling") + log.Warn("resetting http.Server{} timeout to support profiling") r.srv.ReadTimeout = 0 r.srv.WriteTimeout = 0 } // Start the main listener. go func() { - logrus.Infof("listening on %s", r.srv.Addr) + log.Infof("listening on %s", r.srv.Addr) if err := listen(); err != nil && err != http.ErrServerClosed { - logrus.Fatalf("listen: %s", err) + log.Fatalf("listen: %s", err) } }() } diff --git a/internal/router/session.go b/internal/router/session.go index b49542428..eb4b83874 100644 --- a/internal/router/session.go +++ b/internal/router/session.go @@ -29,9 +29,9 @@ import ( "github.com/gin-contrib/sessions" "github.com/gin-contrib/sessions/memstore" "github.com/gin-gonic/gin" - "github.com/sirupsen/logrus" "github.com/superseriousbusiness/gotosocial/internal/config" "github.com/superseriousbusiness/gotosocial/internal/db" + "github.com/superseriousbusiness/gotosocial/internal/log" "golang.org/x/net/idna" ) @@ -44,7 +44,7 @@ func SessionOptions() sessions.Options { case "strict": samesite = http.SameSiteStrictMode default: - logrus.Warnf("%s set to %s which is not recognized, defaulting to 'lax'", config.AdvancedCookiesSamesiteFlag(), config.GetAdvancedCookiesSamesite()) + log.Warnf("%s set to %s which is not recognized, defaulting to 'lax'", config.AdvancedCookiesSamesiteFlag(), config.GetAdvancedCookiesSamesite()) samesite = http.SameSiteLaxMode } |