package internal import ( "io" "log" "os" "path/filepath" ) // Logger constants var ( Log *log.Logger DaemonLog *log.Logger ) func init() { // Check debug mode once at startup debugMode := os.Getenv("DEBUG") == "1" // Initialize loggers Log = createLogger("envvault.log", debugMode) DaemonLog = createLogger("envvault.daemon.log", debugMode) } // createLogger creates a logger with the specified log file func createLogger(logFileName string, debugMode bool) *log.Logger { // Ensure log directory exists homeDir, err := os.UserHomeDir() if err != nil { log.Printf("Failed to get user home directory: %v", err) return log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile) } logDir := filepath.Join(homeDir, ".local/cache/envvault") if err := os.MkdirAll(logDir, 0700); err != nil { log.Printf("Failed to create log directory: %v", err) return log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile) } // Open log file logFilePath := filepath.Join(logDir, logFileName) f, err := os.OpenFile(logFilePath, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0600) if err != nil { log.Printf("Failed to open log file: %v", err) return log.New(os.Stderr, "", log.LstdFlags|log.Lshortfile) } // If in debug mode, log to both file and stderr var writer io.Writer if debugMode { writer = io.MultiWriter(f, os.Stderr) } else { writer = f } // Create logger with timestamp, file name, and line number return log.New(writer, "", log.LstdFlags|log.Lshortfile) }