diff --git a/tslog.go b/tslog.go index 4db5036..45c1952 100644 --- a/tslog.go +++ b/tslog.go @@ -11,8 +11,9 @@ const TSLOG core.Provide = "TS_LOG" func ForRoot(h slog.Handler) core.Modules { return func(module core.Module) core.Module { module.NewProvider(core.ProviderOptions{ - Name: TSLOG, - Value: slog.New(h), + Name: TSLOG, + Value: slog.New(h), + Status: core.PUBLIC, }) return module diff --git a/tslog_test.go b/tslog_test.go index dede4a4..8cfd214 100644 --- a/tslog_test.go +++ b/tslog_test.go @@ -53,3 +53,47 @@ func TestForRoot(t *testing.T) { require.Nil(t, err) require.Equal(t, http.StatusOK, resp.StatusCode) } + +func TestInherit(t *testing.T) { + ctrlFnc := func(module core.Module) core.Controller { + ctrl := module.NewController("test") + logger := tslog.Inject(module) + + ctrl.Get("", func(ctx core.Ctx) error { + logger.Info("Request processed", + "http", slog.Group("request", + "method", "GET", + "path", "/api/users", + "status", 200, + ), + "duration_ms", 150, + ) + return ctx.JSON(true) + }) + return ctrl + } + + parentMod := func(module core.Module) core.Module { + return module.New(core.NewModuleOptions{ + Imports: []core.Modules{tslog.ForRoot(slog.NewJSONHandler(os.Stdout, nil))}, + }) + } + + childMod := func() core.Module { + return core.NewModule(core.NewModuleOptions{ + Imports: []core.Modules{parentMod}, + Controllers: []core.Controllers{ctrlFnc}, + }) + } + + app := core.CreateFactory(childMod) + + testServer := httptest.NewServer(app.PrepareBeforeListen()) + defer testServer.Close() + + testClient := testServer.Client() + + resp, err := testClient.Get(testServer.URL + "/test") + require.Nil(t, err) + require.Equal(t, http.StatusOK, resp.StatusCode) +}