netbirdio/netbird · error
failed to set log level: %v
Error message
failed to set log level: %v
What it means
The SetLogLevel RPC to the daemon failed; the CLI prints only status.Convert(err).Message(), so the text is the daemon-side or transport message with the gRPC envelope stripped. Typical causes mirror other daemon RPCs: service stopped, IPC socket unreachable, permission on the socket, or the daemon rejecting the request internally.
Source
Thrown at client/cmd/debug.go:225
}
defer func() {
if err := conn.Close(); err != nil {
log.Errorf(errCloseConnection, err)
}
}()
client := proto.NewDaemonServiceClient(conn)
level := server.ParseLogLevel(args[0])
if level == proto.LogLevel_UNKNOWN {
//nolint
return fmt.Errorf("unknown log level: %s. Available levels are: panic, fatal, error, warn, info, debug, trace\n", args[0])
}
_, err = client.SetLogLevel(cmd.Context(), &proto.SetLogLevelRequest{
Level: level,
})
if err != nil {
return fmt.Errorf("failed to set log level: %v", status.Convert(err).Message())
}
cmd.Println("Log level set successfully to", args[0])
return nil
}
func runForDuration(cmd *cobra.Command, args []string) error {
duration, err := time.ParseDuration(args[0])
if err != nil {
return fmt.Errorf("invalid duration format: %v", err)
}
anonymizeEnabled, anonymizeLevel, err := effectiveAnonymize()
if err != nil {
return err
}
conn, err := getClient(cmd)View on GitHub (pinned to 93e97f4bf1)
Solutions
- Confirm the daemon is running (systemctl status netbird / service control) and restart it if it has failed, then retry
- Run with the same privileges/user used for other working netbird commands (socket access is user-scoped)
- Check the daemon log for the matching timestamp — if it received the RPC, its log holds the real failure
- Align CLI and daemon versions after upgrades (netbird version, daemon banner)
Example fix
# before sudo systemctl stop netbird && netbird debug log-level debug # -> failed to set log level: ... # after sudo systemctl start netbird && netbird debug log-level debug
Defensive patterns
Strategy: retry
Validate before calling
// Cheap health probe before the real call:
if _, err := proto.NewDaemonServiceClient(conn).Status(ctx, &proto.EmptyRequest{}); err != nil {
return fmt.Errorf("daemon not responding: %v", status.Convert(err).Message())
} Try / catch
// Retry once after a short delay for restart races:
_, err = client.SetLogLevel(ctx, &proto.SetLogLevelRequest{Level: level})
if err != nil {
time.Sleep(2 * time.Second)
_, err = client.SetLogLevel(ctx, &proto.SetLogLevelRequest{Level: level})
}
if err != nil {
return fmt.Errorf("failed to set log level: %v", status.Convert(err).Message())
} Prevention
- Script service-start with a readiness wait before log-level changes
- Run daemon RPCs as the user that owns the IPC socket
- After package upgrades, restart the daemon before changing its log level
When it happens
Trigger: Daemon not running (service stopped/failed) when netbird debug log-level runs; calling user denied access to the daemon IPC socket; daemon mid-restart or crashed; version mismatch between CLI and daemon for this RPC.
Common situations: Changing log level right after boot before the service is up; running under sudo vs not, hitting socket permissions; containers where the CLI is run outside the daemon's IPC namespace; post-upgrade while the daemon restarts.
Related errors
AI-assisted analysis of netbirdio/netbird@93e97f4bf1 (2026-08-16).
Data as JSON: /api/errors/36699910c9679d02.
Report an issue: GitHub.