refactor(log): prelazak sa log na log/slog (strukturisano logovanje)

Uveden podrazumevani slog logger u main.go (podesiLog): JSON u produkciji,
tekst u razvoju, nivo Info. Svih ~70 poziva log.Printf/Println/Fatalf zamenjeno
slog.Error/Warn/Info: greška se prosleđuje kao atribut "error", informativne
vrednosti kao imenovani atributi (port, broj, putanja...), Fatalf -> Error +
os.Exit(1). Upozorenja (inicijalizacija/čišćenje dozvola, migracija kolone) idu
kao slog.Warn.

Auth log (internal/auth/log.go) namerno NIJE diran — ostaje zaseban *log.Logger
u fail2ban formatu. (slog.SetDefault usput preusmerava i standardni log paket.)
This commit is contained in:
2026-06-12 22:33:42 +02:00
parent 47fab264b5
commit b77a8857e6
12 changed files with 99 additions and 84 deletions
+7 -7
View File
@@ -4,7 +4,7 @@ import (
"fmt"
"html/template"
"io/fs"
"log"
"log/slog"
"net/http"
)
@@ -90,7 +90,7 @@ func (h *Handler) renderujTemplate(w http.ResponseWriter, ime string, podaci any
if h.Templates != nil {
t, ok := h.Templates[ime]
if !ok {
log.Printf("kes: šablon '%s' nije pronađen", ime)
slog.Error("šablon nije pronađen", "ime", ime)
http.Error(w, "Greška pri učitavanju stranice", http.StatusInternalServerError)
return
}
@@ -101,14 +101,14 @@ func (h *Handler) renderujTemplate(w http.ResponseWriter, ime string, podaci any
fajlovi = append(fajlovi, "web/templates/stranice/"+ime+".html")
var err error
if tmpl, err = template.New(ime).Funcs(sablonskeFunkcije).ParseFS(h.TemplatesFS, fajlovi...); err != nil {
log.Printf("greška pri parsiranju šablona %s: %v", ime, err)
slog.Error("greška pri parsiranju šablona", "ime", ime, "error", err)
http.Error(w, "Greška pri učitavanju stranice", http.StatusInternalServerError)
return
}
}
if err := tmpl.ExecuteTemplate(w, "base", podaci); err != nil {
log.Printf("greška pri renderovanju šablona %s: %v", ime, err)
slog.Error("greška pri renderovanju šablona", "ime", ime, "error", err)
http.Error(w, "Greška pri prikazu stranice", http.StatusInternalServerError)
}
}
@@ -120,7 +120,7 @@ func (h *Handler) renderujStandalone(w http.ResponseWriter, ime string, podaci a
if h.Templates != nil {
t, ok := h.Templates[ime]
if !ok {
log.Printf("kes: standalone šablon '%s' nije pronađen", ime)
slog.Error("standalone šablon nije pronađen", "ime", ime)
http.Error(w, "Greška pri učitavanju stranice", http.StatusInternalServerError)
return
}
@@ -128,14 +128,14 @@ func (h *Handler) renderujStandalone(w http.ResponseWriter, ime string, podaci a
} else {
var err error
if tmpl, err = template.ParseFS(h.TemplatesFS, "web/templates/stranice/"+ime+".html"); err != nil {
log.Printf("greška pri parsiranju šablona %s: %v", ime, err)
slog.Error("greška pri parsiranju šablona", "ime", ime, "error", err)
http.Error(w, "Greška pri učitavanju stranice", http.StatusInternalServerError)
return
}
}
if err := tmpl.Execute(w, podaci); err != nil {
log.Printf("greška pri renderovanju šablona %s: %v", ime, err)
slog.Error("greška pri renderovanju šablona", "ime", ime, "error", err)
http.Error(w, "Greška pri prikazu stranice", http.StatusInternalServerError)
}
}