func configureLogging(g *libkb.GlobalContext, cl *libcmdline.CommandLine) error { g.Log.Debug("+ configureLogging") defer func() { g.Log.Debug("- configureLogging") }() // Whether or not we autoforked, we're now running in client-server // mode (as opposed to standalone). Register a global LogUI so that // calls to G.Log() in the daemon can be copied to us. This is // something of a hack on the daemon side. if !g.Env.GetDoLogForward() || cl.GetLogForward() == libcmdline.LogForwardNone { g.Log.Debug("Disabling log forwarding") return nil } // TODO This triggers a connection to the RPC server before cmd.Run() is // called, so the command has no way to deal with errors on its own. // This should probably be moved into RegisterProtocols? // Also rpc.RegisterProtocolsWithContext seems to automatically add the // LogUIProtocol? return registerGlobalLogUI(g) }
func configureLogging(g *libkb.GlobalContext, cl *libcmdline.CommandLine) error { g.Log.Debug("+ configureLogging") defer func() { g.Log.Debug("- configureLogging") }() // Whether or not we autoforked, we're now running in client-server // mode (as opposed to standalone). Register a global LogUI so that // calls to G.Log() in the daemon can be copied to us. This is // something of a hack on the daemon side. if !g.Env.GetDoLogForward() || cl.GetLogForward() == libcmdline.LogForwardNone { g.Log.Debug("Disabling log forwarding") return nil } protocols := []rpc.Protocol{client.NewLogUIProtocol()} if err := client.RegisterProtocolsWithContext(protocols, g); err != nil { return err } logLevel := keybase1.LogLevel_INFO if g.Env.GetDebug() { logLevel = keybase1.LogLevel_DEBUG } logClient, err := client.GetLogClient(g) if err != nil { return err } arg := keybase1.RegisterLoggerArg{ Name: "CLI client", Level: logLevel, } if err := logClient.RegisterLogger(context.TODO(), arg); err != nil { g.Log.Warning("Failed to register as a logger: %s", err) } return nil }