Skip to content

Commit fd9b893

Browse files
chore: set json logging format and reduce log priority of large messages (#393)
## 📝 Description Makes setting up logging level possible trough env var default log level info custom logging middleware using logrus that logs all requests on debug level ## ✅ Checklist - [ ] I have tested this change - [ ] This change requires documentation update
1 parent 16bc2db commit fd9b893

File tree

4 files changed

+74
-5
lines changed

4 files changed

+74
-5
lines changed

self_hosted_hub/cmd/server/main.go

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -153,7 +153,18 @@ func configureFeatureProvider() (feature.Provider, error) {
153153
}
154154

155155
func main() {
156-
log.SetFormatter(&log.TextFormatter{TimestampFormat: time.StampMilli})
156+
log.SetFormatter(&log.JSONFormatter{TimestampFormat: time.StampMilli})
157+
log.SetOutput(os.Stdout)
158+
159+
log.SetLevel(log.InfoLevel)
160+
if os.Getenv("LOG_LEVEL") != "" {
161+
level, err := log.ParseLevel(os.Getenv("LOG_LEVEL"))
162+
if err != nil {
163+
log.Fatalf("Invalid log level: %v", err)
164+
}
165+
log.SetLevel(level)
166+
}
167+
157168
configureWatchman(fmt.Sprintf("%s.%s", metricService, os.Getenv("METRICS_NAMESPACE")))
158169

159170
if os.Getenv("START_INTERNAL_API") == "yes" {

self_hosted_hub/pkg/logging/logging.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,11 @@ func ForAgent(agent *models.Agent) *log.Entry {
1212

1313
return log.WithFields(
1414
log.Fields{
15+
"organization_id": agent.OrganizationID,
16+
"agent_type": agent.AgentTypeName,
1517
"agent_id": agent.ID,
18+
"agent_name": agent.Name,
19+
"agent_version": agent.Version,
1620
},
1721
)
1822
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
package publicapi
2+
3+
import (
4+
"net/http"
5+
"time"
6+
7+
log "github.com/sirupsen/logrus"
8+
)
9+
10+
func loggingMiddleware(handler http.Handler, logger *log.Logger) http.Handler {
11+
return &loggingHandler{handler: handler, l: logger}
12+
}
13+
14+
type loggingHandler struct {
15+
handler http.Handler
16+
l *log.Logger
17+
}
18+
19+
type responseWriter struct {
20+
http.ResponseWriter
21+
statusCode int
22+
}
23+
24+
func (rw *responseWriter) WriteHeader(code int) {
25+
rw.statusCode = code
26+
rw.ResponseWriter.WriteHeader(code)
27+
}
28+
29+
func (lh *loggingHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
30+
start := time.Now()
31+
32+
// Wrap the response writer to capture status code
33+
wrapped := &responseWriter{
34+
ResponseWriter: w,
35+
statusCode: 200, // default status code
36+
}
37+
38+
lh.handler.ServeHTTP(wrapped, r)
39+
40+
duration := time.Since(start)
41+
logFields := log.Fields{
42+
"method": r.Method,
43+
"path": r.URL.Path,
44+
"remote": r.RemoteAddr,
45+
"user_agent": r.UserAgent(),
46+
"duration": duration,
47+
"status": wrapped.statusCode,
48+
}
49+
50+
if wrapped.statusCode > 400 {
51+
lh.l.WithFields(logFields).Error("handled request")
52+
} else {
53+
lh.l.WithFields(logFields).Debug("handled request")
54+
}
55+
}

self_hosted_hub/pkg/publicapi/server.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"fmt"
88
"net/http"
99
"net/url"
10-
"os"
1110
"strings"
1211
"time"
1312

@@ -529,7 +528,7 @@ func (s *Server) Sync(w http.ResponseWriter, r *http.Request) {
529528
return
530529
}
531530

532-
logging.ForAgent(agent).Infof("Sync request: %v", request)
531+
logging.ForAgent(agent).Debugf("Sync request: %v", request)
533532

534533
response, err := agentsync.Process(r.Context(), s.quotaClient, s.agentCounter, s.publisher, agent, request)
535534
if err != nil {
@@ -539,7 +538,7 @@ func (s *Server) Sync(w http.ResponseWriter, r *http.Request) {
539538
return
540539
}
541540

542-
logging.ForAgent(agent).Infof("Sync response: %v", response)
541+
logging.ForAgent(agent).Debugf("Sync response: %v", response)
543542
err = respondWithJSON(w, http.StatusOK, response)
544543
if err != nil {
545544
respondWith500(w)
@@ -591,7 +590,7 @@ func (s *Server) Serve(host string, port int) error {
591590
WriteTimeout: 30 * time.Second,
592591
IdleTimeout: 60 * time.Second,
593592
Handler: http.TimeoutHandler(
594-
handlers.LoggingHandler(os.Stdout, s.Router),
593+
loggingMiddleware(s.Router, log.StandardLogger()),
595594
s.timeoutHandlerTimeout,
596595
"request timed out",
597596
),

0 commit comments

Comments
 (0)