diff --git a/cmd/nvidia-container-runtime/main.go b/cmd/nvidia-container-runtime/main.go index b0df4f87..099c47be 100644 --- a/cmd/nvidia-container-runtime/main.go +++ b/cmd/nvidia-container-runtime/main.go @@ -5,6 +5,7 @@ import ( "os" "github.com/NVIDIA/nvidia-container-toolkit/internal/config" + "github.com/sirupsen/logrus" ) var logger = NewLogger() @@ -38,6 +39,12 @@ func run(argv []string) (rerr error) { logger.CloseFile() }() + if logLevel, err := logrus.ParseLevel(cfg.NVIDIAContainerRuntimeConfig.LogLevel); err == nil { + logger.SetLevel(logLevel) + } else { + logger.Warnf("Invalid log-level '%v'; using '%v'", cfg.NVIDIAContainerRuntimeConfig.LogLevel, logger.Level.String()) + } + runtime, err := newNVIDIAContainerRuntime(logger.Logger, cfg, argv) if err != nil { return fmt.Errorf("failed to create NVIDIA Container Runtime: %v", err) diff --git a/internal/config/config_test.go b/internal/config/config_test.go index cf50c4ed..cc18c04f 100644 --- a/internal/config/config_test.go +++ b/internal/config/config_test.go @@ -64,6 +64,7 @@ func TestGetConfig(t *testing.T) { DebugFilePath: "/dev/null", Experimental: false, DiscoverMode: "auto", + LogLevel: "info", }, NVIDIACTKConfig: CTKConfig{ Path: "nvidia-ctk", @@ -77,6 +78,7 @@ func TestGetConfig(t *testing.T) { "nvidia-container-runtime.debug = \"/foo/bar\"", "nvidia-container-runtime.experimental = true", "nvidia-container-runtime.discover-mode = \"not-legacy\"", + "nvidia-container-runtime.log-level = \"debug\"", "nvidia-ctk.path = \"/foo/bar/nvidia-ctk\"", }, expectedConfig: &Config{ @@ -87,6 +89,7 @@ func TestGetConfig(t *testing.T) { DebugFilePath: "/foo/bar", Experimental: true, DiscoverMode: "not-legacy", + LogLevel: "debug", }, NVIDIACTKConfig: CTKConfig{ Path: "/foo/bar/nvidia-ctk", @@ -102,6 +105,7 @@ func TestGetConfig(t *testing.T) { "debug = \"/foo/bar\"", "experimental = true", "discover-mode = \"not-legacy\"", + "log-level = \"debug\"", "[nvidia-ctk]", "path = \"/foo/bar/nvidia-ctk\"", }, @@ -113,6 +117,7 @@ func TestGetConfig(t *testing.T) { DebugFilePath: "/foo/bar", Experimental: true, DiscoverMode: "not-legacy", + LogLevel: "debug", }, NVIDIACTKConfig: CTKConfig{ Path: "/foo/bar/nvidia-ctk", diff --git a/internal/config/runtime.go b/internal/config/runtime.go index 7486e9e9..5961378b 100644 --- a/internal/config/runtime.go +++ b/internal/config/runtime.go @@ -18,6 +18,7 @@ package config import ( "github.com/pelletier/go-toml" + "github.com/sirupsen/logrus" ) // RuntimeConfig stores the config options for the NVIDIA Container Runtime @@ -25,6 +26,8 @@ type RuntimeConfig struct { DebugFilePath string Experimental bool DiscoverMode string + // LogLevel defines the logging level for the application + LogLevel string } // getRuntimeConfigFrom reads the nvidia container runtime config from the specified toml Tree. @@ -38,6 +41,7 @@ func getRuntimeConfigFrom(toml *toml.Tree) *RuntimeConfig { cfg.DebugFilePath = toml.GetDefault("nvidia-container-runtime.debug", cfg.DebugFilePath).(string) cfg.Experimental = toml.GetDefault("nvidia-container-runtime.experimental", cfg.Experimental).(bool) cfg.DiscoverMode = toml.GetDefault("nvidia-container-runtime.discover-mode", cfg.DiscoverMode).(string) + cfg.LogLevel = toml.GetDefault("nvidia-container-runtime.log-level", cfg.LogLevel).(string) return cfg } @@ -48,6 +52,7 @@ func GetDefaultRuntimeConfig() *RuntimeConfig { DebugFilePath: "/dev/null", Experimental: false, DiscoverMode: "auto", + LogLevel: logrus.InfoLevel.String(), } return &c