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
+4 -4
View File
@@ -4,7 +4,7 @@ import (
"encoding/json"
"errors"
"html/template"
"log"
"log/slog"
"net/http"
"strconv"
"strings"
@@ -171,7 +171,7 @@ func (h *Handler) SacuvajProdaju(w http.ResponseWriter, r *http.Request) {
brojNaloga, err := h.ProdajaRepo.SledeciBroj(r.Context())
if err != nil {
log.Printf("greška pri generisanju broja naloga: %v", err)
slog.Error("greška pri generisanju broja naloga", "error", err)
renderujGresku("Greška pri generisanju broja naloga.")
return
}
@@ -191,7 +191,7 @@ func (h *Handler) SacuvajProdaju(w http.ResponseWriter, r *http.Request) {
if errors.As(err, &errStanje) {
renderujGresku(errStanje.Error())
} else {
log.Printf("greška pri čuvanju prodaje: %v", err)
slog.Error("greška pri čuvanju prodaje", "error", err)
renderujGresku("Greška pri čuvanju prodajnog naloga.")
}
return
@@ -403,7 +403,7 @@ func (h *Handler) StornoProdaje(w http.ResponseWriter, r *http.Request) {
}
razlog := strings.TrimSpace(r.FormValue("razlog"))
if err := h.ProdajaRepo.Storno(r.Context(), id, razlog, &k.ID); err != nil {
log.Printf("greška pri storniranju naloga: %v", err)
slog.Error("greška pri storniranju naloga", "error", err)
middleware.SetFlash(w, r, h.DB, "greska", "Greška pri storniranju. Možda je nalog već storniran.")
http.Redirect(w, r, "/prodaja/"+strconv.FormatInt(id, 10), http.StatusSeeOther)
return