Files
oneuptime/InfrastructureAgent/utils/logger.go

69 lines
1.6 KiB
Go

package utils
import (
"fmt"
slog "log/slog"
"os"
"path/filepath"
"runtime"
)
func SetDefaultLogger() {
logPath := GetLogPath()
logFile, err := os.OpenFile(logPath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666)
if err != nil {
slog.Default().Error("Failed to open log file", "error", err)
// If we can't open the log file, we'll log to the console instead
logFile = os.Stdout
}
//defer logFile.Close()
logger := slog.New(slog.NewTextHandler(logFile, nil))
slog.SetDefault(logger)
}
// GetLogPath returns the full path to the log file
func GetLogPath() string {
var basePath string
if runtime.GOOS == "windows" {
basePath = os.Getenv("PROGRAMDATA")
if basePath == "" {
basePath = fmt.Sprintf("C:%sProgramData", string(filepath.Separator))
}
} else {
basePath = "/var/log"
}
// Define the directory path where the log file will be stored
logDirectory := filepath.Join(basePath, "oneuptime-infrastructure-agent")
// Ensure the directory exists
err := ensureDir(logDirectory)
if err != nil {
slog.Default().Error("Failed to create log directory, falling back to current directory", "error", err)
return "oneuptime-infrastructure-agent.log"
}
// Return the full path to the log file
return filepath.Join(logDirectory, "oneuptime-infrastructure-agent.log")
}
// ensureDir checks if a directory exists and makes it if it does not
func ensureDir(dirName string) error {
info, err := os.Stat(dirName)
if os.IsNotExist(err) {
// Directory does not exist, create it
return os.MkdirAll(dirName, 0755)
}
if err != nil {
return err
}
if !info.IsDir() {
// Exists but is not a directory
return os.ErrExist
}
return nil
}