如何使用日志中间件

j3d*_*j3d 6 go go-echo

下面是我使用 Labstack 的 Echo 用 Go 编写的 Web 应用程序的入口点:

package main

import (
    "github.com/labstack/echo"
    mw "github.com/labstack/echo/middleware"
)

func main() {
    controller := controllers.NewUserController(getSession())

    app := echo.New()

    app.Use(mw.Logger())
    app.Use(mw.Recover())
    app.SetDebug(true)

    app.Post("/users", controller.CreateUser)
    app.Get("/users", controller.ListUsers)
    app.Get("/users/:id", controller.GetUser)
    app.Patch("/users/:id", controller.UpdateUser)
    app.Delete("/users/:id", controller.DeleteUser)

    app.Run(":8000")
}
Run Code Online (Sandbox Code Playgroud)

如何重用在Echo应用程序中实例化的日志中间件?我试过这个:

包控制器

import (
    "net/http"

    "github.com/labstack/echo"
    "gopkg.in/mgo.v2"
    "gopkg.in/mgo.v2/bson"
)

type (
    UserController struct {
        session *mgo.Session
    }
)

func NewUserController(s *mgo.Session) *UserController {
    return &UserController{s}
}

func (userController UserController) CreateUser(context *echo.Context) error {
    user := &models.User{}

    if err := context.Bind(user); err != nil {
        context.Echo().Logger().Error("Error creating user")
        return err
    }

    user.Id = bson.NewObjectId()

    userController.session.DB("test").C("users").Insert(user)
    context.Echo().Logger().Debug("Created user", id)

    return context.JSON(http.StatusCreated, user)
}
Run Code Online (Sandbox Code Playgroud)

即使上面的代码编译通过,语句

context.Echo().Logger().Debug("Created user", id)
Run Code Online (Sandbox Code Playgroud)

产生任何输出...而下面的语句

context.Echo().Logger().Info("Created user", id)
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

Dan*_*n 0 6

我刚开始使用 Echo,不知道发布后是否有任何变化,但我发现您可以导入 labstack 的记录器:

import "github.com/labstack/gommon/log"
Run Code Online (Sandbox Code Playgroud)

然后使用它:

log.Debug("Created user", id)
Run Code Online (Sandbox Code Playgroud)