59 lines
1.5 KiB
Go
59 lines
1.5 KiB
Go
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)
|
|
}
|