{"id":16773842,"url":"https://github.com/ziflex/lecho","last_synced_at":"2025-03-31T07:08:54.746Z","repository":{"id":45536307,"uuid":"199932363","full_name":"ziflex/lecho","owner":"ziflex","description":"Zerolog wrapper for Echo framework 🍅","archived":false,"fork":false,"pushed_at":"2024-06-03T21:54:50.000Z","size":70,"stargazers_count":97,"open_issues_count":5,"forks_count":11,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-10-14T06:47:07.187Z","etag":null,"topics":["echo-framework","echo-middleware","golang","zerolog"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ziflex.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-07-31T21:36:57.000Z","updated_at":"2024-10-07T07:14:23.000Z","dependencies_parsed_at":"2023-11-15T04:27:07.522Z","dependency_job_id":"a85875c7-d9ff-44ae-b501-872a2df8b5a2","html_url":"https://github.com/ziflex/lecho","commit_stats":null,"previous_names":[],"tags_count":21,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ziflex%2Flecho","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ziflex%2Flecho/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ziflex%2Flecho/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ziflex%2Flecho/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ziflex","download_url":"https://codeload.github.com/ziflex/lecho/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246429484,"owners_count":20775807,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["echo-framework","echo-middleware","golang","zerolog"],"created_at":"2024-10-13T06:47:10.596Z","updated_at":"2025-03-31T07:08:54.725Z","avatar_url":"https://github.com/ziflex.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# lecho :tomato:\n\n[Zerolog](https://github.com/rs/zerolog) wrapper for [Echo](https://echo.labstack.com/) web framework.\n\n## Installation\n\nFor Echo v4:\n\n```\ngo get github.com/ziflex/lecho/v3\n```\n\nFor Echo v3:\n\n```\ngo get github.com/ziflex/lecho\n```\n\n## Quick start\n\n```go\npackage main \n\nimport (\n\t\"os\"\n\t\"github.com/labstack/echo/v4\"\n\t\"github.com/labstack/echo/v4/middleware\"\n\t\"github.com/ziflex/lecho/v3\"\n)\n\nfunc main() {\n    e := echo.New()\n    e.Logger = lecho.New(os.Stdout)\n}\n```\n\n### Using existing zerolog instance\n\n```go\npackage main \n\nimport (\n\t\"os\"\n\t\"github.com/labstack/echo/v4\"\n\t\"github.com/labstack/echo/v4/middleware\"\n\t\"github.com/ziflex/lecho/v3\"\n        \"github.com/rs/zerolog\"\n)\n\nfunc main() {\n    log := zerolog.New(os.Stdout)\n    e := echo.New()\n    e.Logger = lecho.From(log)\n}\n\n```\n\n## Options\n\n```go\n\nimport (\n\t\"os\",\n\t\"github.com/labstack/echo\"\n\t\"github.com/labstack/echo/middleware\"\n\t\"github.com/ziflex/lecho/v3\"\n)\n\nfunc main() {\n    e := echo.New()\n    e.Logger = lecho.New(\n       os.Stdout,\n       lecho.WithLevel(log.DEBUG),\n       lecho.WithFields(map[string]interface{}{ \"name\": \"lecho factory\"}),\n       lecho.WithTimestamp(),\n       lecho.WithCaller(),\n       lecho.WithPrefix(\"we ❤️ lecho\"),\n       lecho.WithHook(...),\n       lecho.WithHookFunc(...),\n    )\n}\n```\n\n## Middleware\n\n### Logging requests and attaching request id to a context logger \n\n```go\n\nimport (\n\t\"os\",\n\t\"github.com/labstack/echo\"\n\t\"github.com/labstack/echo/middleware\"\n\t\"github.com/ziflex/lecho/v3\"\n\t\"github.com/rs/zerolog\"\n)\n\nfunc main() {\n    e := echo.New()\n    logger := lecho.New(\n            os.Stdout,\n            lecho.WithLevel(log.DEBUG),\n            lecho.WithTimestamp(),\n            lecho.WithCaller(),\n         )\n    e.Logger = logger\n    \n    e.Use(middleware.RequestID())\n    e.Use(lecho.Middleware(lecho.Config{\n    \tLogger: logger\n    }))\t\n    e.GET(\"/\", func(c echo.Context) error {\n        c.Logger().Print(\"Echo interface\")\n        zerolog.Ctx(c.Request().Context()).Print(\"Zerolog interface\")\n\t\n\treturn c.String(http.StatusOK, \"Hello, World!\")\n    })\n}\n\n```\n\n### Escalate log level for slow requests:\n```go\ne.Use(lecho.Middleware(lecho.Config{\n    Logger: logger,\n    RequestLatencyLevel: zerolog.WarnLevel,\n    RequestLatencyLimit: 500 * time.Millisecond,\n}))\n```\n\n\n### Nesting under a sub dictionary\n\n```go\ne.Use(lecho.Middleware(lecho.Config{\n        Logger: logger,\n        NestKey: \"request\"\n    }))\n    // Output: {\"level\":\"info\",\"request\":{\"remote_ip\":\"5.6.7.8\",\"method\":\"GET\", ...}, ...}\n```\n\n### Enricher\n\nEnricher allows you to add additional fields to the log entry.\n\n```go\ne.Use(lecho.Middleware(lecho.Config{\n        Logger: logger,\n        Enricher: func(c echo.Context, logger zerolog.Context) zerolog.Context {\n            return e.Str(\"user_id\", c.Get(\"user_id\"))\n        },\n    }))\n    // Output: {\"level\":\"info\",\"user_id\":\"123\", ...}\n```\n\n### Errors\nSince lecho v3.4.0, the middleware does not automatically propagate errors up the chain. \nIf you want to do that, you can set `HandleError` to ``true``.\n\n```go\ne.Use(lecho.Middleware(lecho.Config{\n    Logger: logger,\n    HandleError: true,\n}))\n```\n\n## Helpers\n\n### Level converters\n\n```go\n\nimport (\n    \"fmt\",\n    \"github.com/labstack/echo\"\n    \"github.com/labstack/echo/middleware\"\n    \"github.com/labstack/gommon/log\"\n    \"github.com/ziflex/lecho/v3\"\n)\n\nfunc main() {\n\tvar z zerolog.Level\n\tvar e log.Lvl\n\t\n    z, e = lecho.MatchEchoLevel(log.WARN)\n    \n    fmt.Println(z, e)\n    \n    e, z = lecho.MatchZeroLevel(zerolog.INFO)\n\n    fmt.Println(z, e)\n}\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fziflex%2Flecho","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fziflex%2Flecho","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fziflex%2Flecho/lists"}