package main
import (
"fmt"
"net/http"
"os"
"github.com/drossan/go_logs"
httplogs "github.com/drossan/go_logs/http"
)
func main() {
// Create production logger
logger, err := go_logs.New(
go_logs.WithLevel(go_logs.InfoLevel),
go_logs.WithFormatter(go_logs.NewJSONFormatter()),
go_logs.WithRotatingFile("/var/log/app.log", 100, 5),
)
if err != nil {
fmt.Fprintf(os.Stderr, "Failed to create logger: %v\n", err)
os.Exit(1)
}
// Configure dynamic level endpoint with security
handler := httplogs.NewDynamicLevelHandler(logger, httplogs.Config{
Endpoint: "/admin/log-level",
AuthToken: os.Getenv("LOG_ADMIN_TOKEN"), // From env var
RateLimit: 10,
AllowedIPs: []string{
"10.0.0.0/8", // Internal network only
"192.168.1.0/24", // Admin subnet
},
})
// Register endpoints
http.Handle("/admin/", handler)
// Application endpoints
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
logger.Info("Request received",
go_logs.String("method", r.Method),
go_logs.String("path", r.URL.Path),
)
fmt.Fprintf(w, "Hello, World!")
})
// Start server
logger.Info("Server starting", go_logs.Int("port", 8080))
if err := http.ListenAndServe(":8080", nil); err != nil {
logger.Fatal("Server failed", go_logs.Err(err))
}
}