code: func FailoverHandler(hs ...Handler) Handler {
  	return FuncHandler(func(r *Record) error {
  		var err error
  		for i, h := range hs {
  			err = h.Log(r)
  			if err == nil {
  				return nil
  			}
  			r.Ctx = append(r.Ctx, fmt.Sprintf("failover_err_%d", i), err)
  		}
  
  		return err
  	})
  }
docs: // FailoverHandler writes all log records to the first handler
  // specified, but will failover and write to the second handler if
  // the first handler has failed, and so on for all handlers specified.
  // For example you might want to log to a network socket, but failover
  // to writing to a file if the network fails, and then to
  // standard out if the file write fails:
  //
  //     log.FailoverHandler(
  //         log.Must.NetHandler("tcp", ":9090", log.JSONFormat()),
  //         log.Must.FileHandler("/var/log/app.log", log.LogfmtFormat()),
  //         log.StdoutHandler)
  //
  // All writes that do not go to the first handler will add context with keys of
  // the form "failover_err_{idx}" which explain the error encountered while
  // trying to write to the handlers before them in the list.