Creare un sistema di logging delle visite di un sito web con Go

La registrazione delle visite di un sito web è essenziale per analizzare il traffico, migliorare le performance, e prendere decisioni strategiche. In questo articolo, esploreremo come costruire un sistema di logging per le visite di un sito web utilizzando il linguaggio di programmazione Go. Vedremo come implementare un logger semplice che registri le visite, analizzi il traffico e salvi i dati in un formato facilmente accessibile.

Per gestire le visite, il primo passo è creare un server HTTP con Go. Ecco un esempio di codice per avviare un server HTTP di base:


package main

import (
    "fmt"
    "log"
    "net/http"
    "os"
    "time"
)

func main() {
    // Creare un file di log
    file, err := os.OpenFile("visits.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666)
    if err != nil {
        log.Fatalf("Errore nell'apertura del file di log: %v", err)
    }
    defer file.Close()

    // Configurare il logger
    logger := log.New(file, "", log.LstdFlags)

    // Definire il gestore per la route principale
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        logRequest(logger, r)
        fmt.Fprintln(w, "Benvenuto sul nostro sito!")
    })

    // Avviare il server
    fmt.Println("Server in esecuzione sulla porta 8080")
    if err := http.ListenAndServe(":8080", nil); err != nil {
        log.Fatalf("Errore di avvio del server: %v", err)
    }
}

Per registrare ogni visita, creiamo una funzione logRequest che estragga le informazioni dalla richiesta HTTP e le salvi nel file di log. Gli elementi che potremmo voler registrare includono:

  • L’indirizzo IP del visitatore
  • Il metodo HTTP (GET, POST, ecc.)
  • La pagina richiesta
  • Il timestamp della visita
  • Il “User-Agent” del visitatore

Ecco come implementare logRequest:


func logRequest(logger *log.Logger, r *http.Request) {
    timestamp := time.Now().Format(time.RFC3339)
    ip := r.RemoteAddr
    method := r.Method
    url := r.URL.Path
    userAgent := r.UserAgent()

    logEntry := fmt.Sprintf("Timestamp: %s, IP: %s, Metodo: %s, URL: %s, User-Agent: %s", timestamp, ip, method, url, userAgent)
    logger.Println(logEntry)
}

Questa funzione crea una stringa logEntry contenente tutte le informazioni utili sulla visita e la registra tramite il logger. Ogni visita verrà registrata su una nuova riga nel file visits.log.

Conclusione

In questo articolo, abbiamo creato un semplice sistema di logging per registrare le visite di un sito web utilizzando Go. Abbiamo visto come configurare un server HTTP, implementare una funzione di logging e salvare i dati delle visite in un file di log. Questo sistema può essere facilmente ampliato per supportare funzionalità aggiuntive come l'analisi dei dati o l'integrazione con un database per la gestione avanzata delle statistiche di traffico.

Torna su