Add structured daemon lifecycle logs
VM start, image build, and network/setup failures were hard to diagnose because bangerd emitted almost no lifecycle logs and the Firecracker SDK logger was discarded. This adds a daemon-wide JSON logger with configurable log level so failures leave breadcrumbs instead of only side effects. Log the main daemon and VM lifecycle stages, preserve raw Firecracker and image-build helper output in dedicated files, and include those log paths in daemon status and returned errors. Bridge SDK logrus output into the daemon logger at debug level so low-level Firecracker diagnostics are available without making normal info logs unreadable. Validation: go test ./... and make build. Left unrelated worktree changes out of this commit, including internal/api/types.go, the deleted shell scripts, and my-rootfs.ext4.
This commit is contained in:
parent
5018bc6170
commit
644e60d739
13 changed files with 746 additions and 31 deletions
|
|
@ -1,7 +1,10 @@
|
|||
package firecracker
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"log/slog"
|
||||
"strings"
|
||||
"testing"
|
||||
)
|
||||
|
||||
|
|
@ -76,3 +79,34 @@ func TestBuildProcessRunnerUsesSudoWrapper(t *testing.T) {
|
|||
t.Fatalf("script = %q, want %q", cmd.Args[4], want)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSDKLoggerBridgeEmitsStructuredDebugLogs(t *testing.T) {
|
||||
var buf bytes.Buffer
|
||||
logger := slog.New(slog.NewJSONHandler(&buf, &slog.HandlerOptions{Level: slog.LevelDebug}))
|
||||
|
||||
entry := newLogger(logger)
|
||||
entry.WithField("vm_id", "vm-1").Info("sdk ready")
|
||||
|
||||
output := buf.String()
|
||||
if !strings.Contains(output, `"component":"firecracker_sdk"`) {
|
||||
t.Fatalf("output = %q, want firecracker_sdk component", output)
|
||||
}
|
||||
if !strings.Contains(output, `"vm_id":"vm-1"`) {
|
||||
t.Fatalf("output = %q, want vm_id field", output)
|
||||
}
|
||||
if !strings.Contains(output, `"msg":"sdk ready"`) {
|
||||
t.Fatalf("output = %q, want sdk message", output)
|
||||
}
|
||||
}
|
||||
|
||||
func TestSDKLoggerBridgeSuppressesDebugAtInfoLevel(t *testing.T) {
|
||||
var buf bytes.Buffer
|
||||
logger := slog.New(slog.NewJSONHandler(&buf, &slog.HandlerOptions{Level: slog.LevelInfo}))
|
||||
|
||||
entry := newLogger(logger)
|
||||
entry.Info("sdk hidden at info")
|
||||
|
||||
if buf.Len() != 0 {
|
||||
t.Fatalf("expected info-level logger to suppress sdk debug chatter, got %q", buf.String())
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue