Created
March 6, 2024 13:11
-
-
Save febriliankr/54a7dd98eb88730fa016ba521eae1237 to your computer and use it in GitHub Desktop.
Loki Logrus Hook: Error
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package server | |
import ( | |
"context" | |
"fmt" | |
"net/http" | |
"os" | |
"os/signal" | |
"path/filepath" | |
"time" | |
"github.com/go-playground/validator" | |
"github.com/labstack/echo/v4" | |
"github.com/labstack/echo/v4/middleware" | |
echoLog "github.com/labstack/gommon/log" | |
"github.com/neko-neko/echo-logrus/v2/log" | |
"github.com/rifflock/lfshook" | |
logrusloki "github.com/schoentoon/logrus-loki" | |
"github.com/sirupsen/logrus" | |
) | |
func NewLogrusLogger() (*logrus.Logger, error) { | |
hook, err := logrusloki.NewLokiDefaults("http://127.0.0.1:3100/loki/api/v1/push") | |
if err != nil { | |
return nil, err | |
} | |
defer hook.Close() | |
log := logrus.New() | |
log.Hooks.Add(lfshook.NewHook( | |
lfshook.PathMap{ | |
logrus.InfoLevel: filepath.Join(os.TempDir(), "log", "http_info.log"), | |
logrus.ErrorLevel: filepath.Join(os.TempDir(), "log", "http_error.log"), | |
logrus.FatalLevel: filepath.Join(os.TempDir(), "log", "http_fatal.log"), | |
}, | |
&logrus.JSONFormatter{}, | |
)) | |
log.AddHook(hook) | |
return log, nil | |
} | |
// NewServer instantiates new Echo server | |
func NewServer(cfg config.Config) *echo.Echo { | |
e := echo.New() | |
logrusLogger, err := NewLogrusLogger() | |
if err != nil { | |
fmt.Println("error initiating loki log hook") | |
panic(err) | |
} | |
e.Use(middlewarex.CORS(), middlewarex.Headers(), middlewarex.Session(cfg), middlewarex.RateLimiter(cfg), middlewarex.Logger(logrusLogger), middleware.Recover(), middleware.RequestID()) | |
e.Pre(middleware.RemoveTrailingSlash()) | |
// Logger https://github.com/neko-neko/echo-logrus | |
log.Logger().SetOutput(os.Stdout) | |
log.Logger().SetLevel(echoLog.INFO) | |
log.Logger().SetFormatter(&logrus.JSONFormatter{ | |
TimestampFormat: time.RFC3339, | |
}) | |
log.Logger().Hooks.Add(lfshook.NewHook( | |
lfshook.PathMap{ | |
logrus.InfoLevel: filepath.Join(os.TempDir(), "log", "info.log"), | |
logrus.ErrorLevel: filepath.Join(os.TempDir(), "log", "error.log"), | |
logrus.FatalLevel: filepath.Join(os.TempDir(), "log", "fatal.log"), | |
}, | |
&logrus.JSONFormatter{}, | |
)) | |
e.Logger = log.Logger() | |
e.Validator = &CustomValidator{V: validator.New()} | |
customErr := &customErrHandler{e: e} | |
e.HTTPErrorHandler = customErr.handler | |
e.Binder = &CustomBinder{b: &echo.DefaultBinder{}} | |
return e | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment