Move logging to separate struct

This commit is contained in:
2025-10-14 19:32:15 +02:00
parent cf20f304b3
commit ef3478e2a3
2 changed files with 17 additions and 6 deletions

View File

@@ -311,3 +311,7 @@ func (i *Process) IsRemote() bool {
return len(i.options.Nodes) > 0 return len(i.options.Nodes) > 0
} }
func (i *Process) GetLogs(num_lines int) (string, error) {
return i.logger.GetLogs(num_lines)
}

View File

@@ -6,6 +6,7 @@ import (
"io" "io"
"os" "os"
"strings" "strings"
"sync"
"time" "time"
) )
@@ -14,6 +15,7 @@ type InstanceLogger struct {
logDir string logDir string
logFile *os.File logFile *os.File
logFilePath string logFilePath string
mu sync.RWMutex
} }
func NewInstanceLogger(name string, logDir string) *InstanceLogger { func NewInstanceLogger(name string, logDir string) *InstanceLogger {
@@ -25,6 +27,9 @@ func NewInstanceLogger(name string, logDir string) *InstanceLogger {
// Create creates and opens the log files for stdout and stderr // Create creates and opens the log files for stdout and stderr
func (i *InstanceLogger) Create() error { func (i *InstanceLogger) Create() error {
i.mu.Lock()
defer i.mu.Unlock()
if i.logDir == "" { if i.logDir == "" {
return fmt.Errorf("logDir is empty for instance %s", i.name) return fmt.Errorf("logDir is empty for instance %s", i.name)
} }
@@ -52,16 +57,15 @@ func (i *InstanceLogger) Create() error {
} }
// GetLogs retrieves the last n lines of logs from the instance // GetLogs retrieves the last n lines of logs from the instance
func (i *Process) GetLogs(num_lines int) (string, error) { func (i *InstanceLogger) GetLogs(num_lines int) (string, error) {
i.mu.RLock() i.mu.RLock()
logFileName := i.logger.logFilePath defer i.mu.RUnlock()
i.mu.RUnlock()
if logFileName == "" { if i.logFilePath == "" {
return "", fmt.Errorf("log file not created for instance %s", i.Name) return "", fmt.Errorf("log file not created for instance %s", i.name)
} }
file, err := os.Open(logFileName) file, err := os.Open(i.logFilePath)
if err != nil { if err != nil {
return "", fmt.Errorf("failed to open log file: %w", err) return "", fmt.Errorf("failed to open log file: %w", err)
} }
@@ -95,6 +99,9 @@ func (i *Process) GetLogs(num_lines int) (string, error) {
// closeLogFile closes the log files // closeLogFile closes the log files
func (i *InstanceLogger) Close() { func (i *InstanceLogger) Close() {
i.mu.Lock()
defer i.mu.Unlock()
if i.logFile != nil { if i.logFile != nil {
timestamp := time.Now().Format("2006-01-02 15:04:05") timestamp := time.Now().Format("2006-01-02 15:04:05")
fmt.Fprintf(i.logFile, "=== Instance %s stopped at %s ===\n\n", i.name, timestamp) fmt.Fprintf(i.logFile, "=== Instance %s stopped at %s ===\n\n", i.name, timestamp)