Add configurable log level for pulse-sensor-proxy
Users can now control logging verbosity through: - YAML config file: log_level: "debug|info|warn|error" - Environment variable: PULSE_SENSOR_PROXY_LOG_LEVEL Default log level is set to "info" instead of debug, reducing verbose output. Supported levels: trace, debug, info, warn, error, fatal, panic, disabled Related to #629
This commit is contained in:
parent
23691d5b41
commit
930ad20921
2 changed files with 39 additions and 1 deletions
|
|
@ -21,6 +21,7 @@ type RateLimitConfig struct {
|
||||||
type Config struct {
|
type Config struct {
|
||||||
AllowedSourceSubnets []string `yaml:"allowed_source_subnets"`
|
AllowedSourceSubnets []string `yaml:"allowed_source_subnets"`
|
||||||
MetricsAddress string `yaml:"metrics_address"`
|
MetricsAddress string `yaml:"metrics_address"`
|
||||||
|
LogLevel string `yaml:"log_level"`
|
||||||
|
|
||||||
AllowIDMappedRoot bool `yaml:"allow_idmapped_root"`
|
AllowIDMappedRoot bool `yaml:"allow_idmapped_root"`
|
||||||
AllowedPeerUIDs []uint32 `yaml:"allowed_peer_uids"`
|
AllowedPeerUIDs []uint32 `yaml:"allowed_peer_uids"`
|
||||||
|
|
@ -35,6 +36,7 @@ func loadConfig(configPath string) (*Config, error) {
|
||||||
cfg := &Config{
|
cfg := &Config{
|
||||||
AllowIDMappedRoot: true,
|
AllowIDMappedRoot: true,
|
||||||
AllowedIDMapUsers: []string{"root"},
|
AllowedIDMapUsers: []string{"root"},
|
||||||
|
LogLevel: "info", // Default log level
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try to load config file if it exists
|
// Try to load config file if it exists
|
||||||
|
|
@ -166,6 +168,12 @@ func loadConfig(configPath string) (*Config, error) {
|
||||||
Msg("Rate limit configuration loaded from config file")
|
Msg("Rate limit configuration loaded from config file")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Log level from environment variable
|
||||||
|
if envLogLevel := os.Getenv("PULSE_SENSOR_PROXY_LOG_LEVEL"); envLogLevel != "" {
|
||||||
|
cfg.LogLevel = strings.ToLower(strings.TrimSpace(envLogLevel))
|
||||||
|
log.Info().Str("log_level", cfg.LogLevel).Msg("Log level set from environment")
|
||||||
|
}
|
||||||
|
|
||||||
return cfg, nil
|
return cfg, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -85,6 +85,31 @@ func main() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// parseLogLevel converts a string log level to zerolog.Level
|
||||||
|
func parseLogLevel(levelStr string) zerolog.Level {
|
||||||
|
switch strings.ToLower(strings.TrimSpace(levelStr)) {
|
||||||
|
case "trace":
|
||||||
|
return zerolog.TraceLevel
|
||||||
|
case "debug":
|
||||||
|
return zerolog.DebugLevel
|
||||||
|
case "info":
|
||||||
|
return zerolog.InfoLevel
|
||||||
|
case "warn", "warning":
|
||||||
|
return zerolog.WarnLevel
|
||||||
|
case "error":
|
||||||
|
return zerolog.ErrorLevel
|
||||||
|
case "fatal":
|
||||||
|
return zerolog.FatalLevel
|
||||||
|
case "panic":
|
||||||
|
return zerolog.PanicLevel
|
||||||
|
case "disabled", "none":
|
||||||
|
return zerolog.Disabled
|
||||||
|
default:
|
||||||
|
log.Warn().Str("level", levelStr).Msg("Unknown log level, defaulting to info")
|
||||||
|
return zerolog.InfoLevel
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
type userSpec struct {
|
type userSpec struct {
|
||||||
name string
|
name string
|
||||||
uid int
|
uid int
|
||||||
|
|
@ -276,7 +301,7 @@ type RPCResponse struct {
|
||||||
type handlerFunc func(ctx context.Context, req *RPCRequest, logger zerolog.Logger) (interface{}, error)
|
type handlerFunc func(ctx context.Context, req *RPCRequest, logger zerolog.Logger) (interface{}, error)
|
||||||
|
|
||||||
func runProxy() {
|
func runProxy() {
|
||||||
// Initialize logger
|
// Initialize logger with default level (will be configured after loading config)
|
||||||
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
|
zerolog.TimeFieldFormat = zerolog.TimeFormatUnix
|
||||||
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr})
|
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr})
|
||||||
|
|
||||||
|
|
@ -305,6 +330,10 @@ func runProxy() {
|
||||||
log.Fatal().Err(err).Msg("Failed to load configuration")
|
log.Fatal().Err(err).Msg("Failed to load configuration")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Apply configured log level
|
||||||
|
level := parseLogLevel(cfg.LogLevel)
|
||||||
|
zerolog.SetGlobalLevel(level)
|
||||||
|
|
||||||
runAsUser := os.Getenv("PULSE_SENSOR_PROXY_USER")
|
runAsUser := os.Getenv("PULSE_SENSOR_PROXY_USER")
|
||||||
if runAsUser == "" {
|
if runAsUser == "" {
|
||||||
runAsUser = defaultRunAsUser
|
runAsUser = defaultRunAsUser
|
||||||
|
|
@ -339,6 +368,7 @@ func runProxy() {
|
||||||
Str("ssh_key_dir", sshKeyPath).
|
Str("ssh_key_dir", sshKeyPath).
|
||||||
Str("config_path", cfgPath).
|
Str("config_path", cfgPath).
|
||||||
Str("audit_log", auditPath).
|
Str("audit_log", auditPath).
|
||||||
|
Str("log_level", cfg.LogLevel).
|
||||||
Str("version", Version).
|
Str("version", Version).
|
||||||
Msg("Starting pulse-sensor-proxy")
|
Msg("Starting pulse-sensor-proxy")
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue