mirror of
https://github.com/arkorty/DownLink.git
synced 2026-03-17 16:51:45 +00:00
66 lines
1.5 KiB
Go
66 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"log/slog"
|
|
"os"
|
|
"strconv"
|
|
|
|
"DownLink/services"
|
|
)
|
|
|
|
// Global log buffer for API access
|
|
var LogBuffer *services.LogBuffer
|
|
|
|
// setupLogger configures structured logging for the application
|
|
func setupLogger() {
|
|
// Get log level from environment variable, default to INFO
|
|
logLevel := slog.LevelInfo
|
|
if levelStr := os.Getenv("LOG_LEVEL"); levelStr != "" {
|
|
switch levelStr {
|
|
case "DEBUG":
|
|
logLevel = slog.LevelDebug
|
|
case "INFO":
|
|
logLevel = slog.LevelInfo
|
|
case "WARN":
|
|
logLevel = slog.LevelWarn
|
|
case "ERROR":
|
|
logLevel = slog.LevelError
|
|
}
|
|
}
|
|
|
|
// Initialize log buffer (store last 1000 logs)
|
|
bufferSize := 1000
|
|
if sizeStr := os.Getenv("LOG_BUFFER_SIZE"); sizeStr != "" {
|
|
if parsed, err := strconv.Atoi(sizeStr); err == nil && parsed > 0 {
|
|
bufferSize = parsed
|
|
}
|
|
}
|
|
LogBuffer = services.NewLogBuffer(bufferSize)
|
|
|
|
// Get log format from environment variable, default to JSON
|
|
logFormat := os.Getenv("LOG_FORMAT")
|
|
var baseHandler slog.Handler
|
|
|
|
if logFormat == "text" {
|
|
baseHandler = slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{
|
|
Level: logLevel,
|
|
})
|
|
} else {
|
|
// Default to JSON format
|
|
baseHandler = slog.NewJSONHandler(os.Stdout, &slog.HandlerOptions{
|
|
Level: logLevel,
|
|
})
|
|
}
|
|
|
|
// Wrap the base handler with in-memory handler
|
|
handler := services.NewInMemoryHandler(LogBuffer, baseHandler)
|
|
logger := slog.New(handler)
|
|
slog.SetDefault(logger)
|
|
|
|
slog.Info("Logger initialized",
|
|
"level", logLevel.String(),
|
|
"format", logFormat,
|
|
"buffer_size", bufferSize,
|
|
"service", "DownLink Backend")
|
|
}
|