summaryrefslogtreecommitdiff
path: root/pkg
diff options
context:
space:
mode:
authormo khan <mo@mokhan.ca>2025-03-27 11:47:58 -0600
committermo khan <mo@mokhan.ca>2025-03-27 11:47:58 -0600
commit3faa19c3aeae15070f2e143b031daaddfe296735 (patch)
treedc86e49908920c10479b9e9905c58c0c44e2cee6 /pkg
parentb08580ff78708519f0594a62531cf6ce45559265 (diff)
feat: start to add structured logging
Diffstat (limited to 'pkg')
-rw-r--r--pkg/app/app.go20
-rw-r--r--pkg/authz/token.go4
-rw-r--r--pkg/cfg/mux.go12
-rw-r--r--pkg/log/init.go29
-rw-r--r--pkg/prxy/prxy.go6
-rw-r--r--pkg/srv/srv.go8
6 files changed, 63 insertions, 16 deletions
diff --git a/pkg/app/app.go b/pkg/app/app.go
index 35609d7f..c55ecce5 100644
--- a/pkg/app/app.go
+++ b/pkg/app/app.go
@@ -3,7 +3,6 @@ package app
import (
"encoding/json"
"fmt"
- "log"
"net"
"net/http"
"os"
@@ -14,6 +13,7 @@ import (
"github.com/xlgmokha/x/pkg/x"
"gitlab.com/mokhax/spike/pkg/authz"
"gitlab.com/mokhax/spike/pkg/cfg"
+ xlog "gitlab.com/mokhax/spike/pkg/log"
"gitlab.com/mokhax/spike/pkg/srv"
)
@@ -23,6 +23,7 @@ func WithCasbin() authz.Authorizer {
return authz.AuthorizerFunc(func(r *http.Request) bool {
host, _, err := net.SplitHostPort(r.Host)
if err != nil {
+ xlog.WithFields(r, xlog.Fields{"error": err})
return false
}
@@ -32,11 +33,18 @@ func WithCasbin() authz.Authorizer {
}
ok, err := enforcer.Enforce(subject, host, r.Method, r.URL.Path)
if err != nil {
- fmt.Printf("%v\n", err)
+ xlog.WithFields(r, xlog.Fields{"error": err})
return false
}
fmt.Printf("%v: %v -> %v %v%v\n", ok, subject, r.Method, host, r.URL.Path)
+ xlog.WithFields(r, xlog.Fields{
+ "ok": ok,
+ "subject": subject,
+ "action": r.Method,
+ "domain": host,
+ "object": r.URL.Path,
+ })
return ok
})
}
@@ -50,8 +58,10 @@ func WithCedar() authz.Authorizer {
var entities cedar.EntityMap
if err := json.Unmarshal(x.Must(os.ReadFile("cedar.json")), &entities); err != nil {
- log.Fatal(err)
+ xlog.Logger.Error("Error", "error", err)
+ return nil
}
+
return authz.AuthorizerFunc(func(r *http.Request) bool {
host, _, err := net.SplitHostPort(r.Host)
if err != nil {
@@ -79,9 +89,9 @@ func WithCedar() authz.Authorizer {
}
func Start(bindAddr string) error {
+ mux := authz.HTTP(WithCasbin(), Routes())
return srv.Run(cfg.New(
bindAddr,
- // cfg.WithMux(authz.HTTP(WithCedar(), Routes())),
- cfg.WithMux(authz.HTTP(WithCasbin(), Routes())),
+ cfg.WithMux(mux),
))
}
diff --git a/pkg/authz/token.go b/pkg/authz/token.go
index 1822a217..5985a0fc 100644
--- a/pkg/authz/token.go
+++ b/pkg/authz/token.go
@@ -1,11 +1,11 @@
package authz
import (
- "fmt"
"net/http"
"strings"
"github.com/lestrrat-go/jwx/v3/jwt"
+ xlog "gitlab.com/mokhax/spike/pkg/log"
)
func TokenFrom(r *http.Request) jwt.Token {
@@ -22,7 +22,7 @@ func TokenFrom(r *http.Request) jwt.Token {
)
if err != nil {
- fmt.Printf("error: %v\n", err)
+ xlog.WithFields(r, xlog.Fields{"error": err})
return jwt.New()
}
diff --git a/pkg/cfg/mux.go b/pkg/cfg/mux.go
index 694ee9e7..a55b443e 100644
--- a/pkg/cfg/mux.go
+++ b/pkg/cfg/mux.go
@@ -1,9 +1,17 @@
package cfg
-import "net/http"
+import (
+ "net/http"
+
+ sloghttp "github.com/samber/slog-http"
+ xlog "gitlab.com/mokhax/spike/pkg/log"
+)
func WithMux(mux http.Handler) Option {
return func(config *Config) {
- config.Mux = mux
+ config.Mux = sloghttp.NewWithConfig(xlog.Logger, sloghttp.Config{
+ WithSpanID: true,
+ WithTraceID: true,
+ })(sloghttp.Recovery(mux))
}
}
diff --git a/pkg/log/init.go b/pkg/log/init.go
new file mode 100644
index 00000000..43ec5ab4
--- /dev/null
+++ b/pkg/log/init.go
@@ -0,0 +1,29 @@
+package log
+
+import (
+ "log"
+ "log/slog"
+ "net/http"
+ "os"
+
+ sloghttp "github.com/samber/slog-http"
+ "github.com/xlgmokha/x/pkg/env"
+)
+
+var Logger *slog.Logger
+var Default *log.Logger
+var Handler slog.Handler
+
+func init() {
+ Handler = slog.NewJSONHandler(os.Stdout, nil)
+ Logger = slog.New(Handler).With("env", env.Fetch("APP_ENV", "development"))
+ Default = slog.NewLogLogger(Handler, slog.LevelInfo)
+}
+
+type Fields map[string]interface{}
+
+func WithFields(r *http.Request, fields Fields) {
+ for key, value := range fields {
+ sloghttp.AddCustomAttributes(r, slog.Any(key, value))
+ }
+}
diff --git a/pkg/prxy/prxy.go b/pkg/prxy/prxy.go
index 1e378b3d..809fdc19 100644
--- a/pkg/prxy/prxy.go
+++ b/pkg/prxy/prxy.go
@@ -2,13 +2,13 @@ package prxy
import (
"fmt"
- "log"
"net"
"net/http"
"net/http/httputil"
"net/url"
"github.com/xlgmokha/x/pkg/x"
+ xlog "gitlab.com/mokhax/spike/pkg/log"
)
func New(routes map[string]string) http.Handler {
@@ -21,7 +21,7 @@ func New(routes map[string]string) http.Handler {
Rewrite: func(r *httputil.ProxyRequest) {
host, _, err := net.SplitHostPort(r.In.Host)
if err != nil {
- log.Println(err)
+ xlog.WithFields(r.In, xlog.Fields{"error": err})
return
}
@@ -37,7 +37,7 @@ func New(routes map[string]string) http.Handler {
return nil
},
ErrorHandler: func(w http.ResponseWriter, r *http.Request, err error) {
- log.Println(err)
+ xlog.WithFields(r, xlog.Fields{"error": err})
},
}
}
diff --git a/pkg/srv/srv.go b/pkg/srv/srv.go
index a6261ef6..ccd02e0f 100644
--- a/pkg/srv/srv.go
+++ b/pkg/srv/srv.go
@@ -1,11 +1,11 @@
package srv
import (
- "log"
"net/http"
"time"
"gitlab.com/mokhax/spike/pkg/cfg"
+ xlog "gitlab.com/mokhax/spike/pkg/log"
)
func New(c *cfg.Config) *http.Server {
@@ -15,9 +15,9 @@ func New(c *cfg.Config) *http.Server {
TLSConfig: c.TLS,
ReadHeaderTimeout: 10 * time.Second,
ReadTimeout: 30 * time.Second,
- WriteTimeout: 2 * time.Minute,
- IdleTimeout: 5 * time.Minute,
- ErrorLog: log.Default(),
+ WriteTimeout: 30 * time.Second,
+ IdleTimeout: 30 * time.Second,
+ ErrorLog: xlog.Default,
}
}