mirror of
https://github.com/edgelesssys/constellation.git
synced 2025-06-20 12:14:23 -04:00
cli: collect debug logs in file (#2906)
This commit is contained in:
parent
7edd6259d1
commit
96c5980651
6 changed files with 65 additions and 1 deletions
|
@ -13,7 +13,9 @@ import (
|
|||
"fmt"
|
||||
"io"
|
||||
"io/fs"
|
||||
"log/slog"
|
||||
"net"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"slices"
|
||||
"strings"
|
||||
|
@ -38,6 +40,7 @@ import (
|
|||
"github.com/edgelesssys/constellation/v2/internal/kms/uri"
|
||||
"github.com/edgelesssys/constellation/v2/internal/semver"
|
||||
"github.com/edgelesssys/constellation/v2/internal/versions"
|
||||
"github.com/samber/slog-multi"
|
||||
"github.com/spf13/afero"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/spf13/pflag"
|
||||
|
@ -224,6 +227,10 @@ func runApply(cmd *cobra.Command, _ []string) error {
|
|||
}
|
||||
|
||||
fileHandler := file.NewHandler(afero.NewOsFs())
|
||||
logger, err := newDebugFileLogger(cmd, fileHandler)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
newDialer := func(validator atls.Validator) *dialer.Dialer {
|
||||
return dialer.New(nil, validator, &net.Dialer{})
|
||||
|
@ -248,7 +255,7 @@ func runApply(cmd *cobra.Command, _ []string) error {
|
|||
apply := &applyCmd{
|
||||
fileHandler: fileHandler,
|
||||
flags: flags,
|
||||
log: log,
|
||||
log: logger,
|
||||
wLog: &warnLogger{cmd: cmd, log: log},
|
||||
spinner: spinner,
|
||||
merger: &kubeconfigMerger{log: log},
|
||||
|
@ -858,3 +865,34 @@ type imageFetcher interface {
|
|||
image, region string, useMarketplaceImage bool,
|
||||
) (string, error)
|
||||
}
|
||||
|
||||
func newDebugFileLogger(cmd *cobra.Command, fileHandler file.Handler) (debugLog, error) {
|
||||
logLvl := slog.LevelInfo
|
||||
debugLog, err := cmd.Flags().GetBool("debug")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if debugLog {
|
||||
logLvl = slog.LevelDebug
|
||||
}
|
||||
|
||||
fileWriter := &fileWriter{
|
||||
fileHandler: fileHandler,
|
||||
}
|
||||
return slog.New(
|
||||
slogmulti.Fanout(
|
||||
slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{AddSource: true, Level: logLvl}), // first handler: stderr at log level
|
||||
slog.NewJSONHandler(fileWriter, &slog.HandlerOptions{AddSource: true, Level: slog.LevelDebug}), // second handler: debug JSON log to file
|
||||
),
|
||||
), nil
|
||||
}
|
||||
|
||||
type fileWriter struct {
|
||||
fileHandler file.Handler
|
||||
}
|
||||
|
||||
// Write satisfies the io.Writer interface by writing a message to file.
|
||||
func (l *fileWriter) Write(msg []byte) (int, error) {
|
||||
err := l.fileHandler.Write(constants.CLIDebugLogFile, msg, file.OptAppend)
|
||||
return len(msg), err
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue