zlh-agent/internal/util/log.go
2026-03-07 20:59:27 +00:00

74 lines
1.4 KiB
Go

package util
import (
"fmt"
"io"
"log"
"os"
"time"
)
var (
logFile *os.File
lifecycleFile *os.File
logReady bool
)
// InitLogFile sets up a log file inside the agent directory.
// Called from main.go (optional).
func InitLogFile(path string) error {
f, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
return err
}
logFile = f
logReady = true
log.SetOutput(io.MultiWriter(os.Stdout, logFile))
return nil
}
func CloseLog() {
if logReady && logFile != nil {
_ = logFile.Close()
}
if lifecycleFile != nil {
_ = lifecycleFile.Close()
}
}
// Log writes a timestamped line to stdout AND to log file (if enabled).
func Log(format string, v ...any) {
line := fmt.Sprintf("[%s] %s",
time.Now().Format("2006-01-02 15:04:05"),
fmt.Sprintf(format, v...),
)
// Always print to stdout
log.Println(line)
// Optionally also write to file
if logReady && logFile != nil {
_, _ = logFile.WriteString(line + "\n")
}
}
func InitLifecycleLog(path string) error {
f, err := os.OpenFile(path, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
return err
}
lifecycleFile = f
return nil
}
func LogLifecycle(format string, v ...any) {
line := fmt.Sprintf("[%s] %s",
time.Now().Format("2006-01-02 15:04:05"),
fmt.Sprintf(format, v...),
)
log.Println(line)
if lifecycleFile != nil {
_, _ = lifecycleFile.WriteString(line + "\n")
}
}