You are right, of course the user needs to know about the errors. Therefore, they should surely be logged. However, without catching these errors a single faulty service provider can crash the whole system or at least prevent the application from using other service providers.
Faults should generally not propagate until the user sees an error message, they should be contained to the smallest realm possible. In this case, the application should continue to work, except that the faulty service provider will not provide any service.
An ideal solution would be to make the behavior configurable, so that programmers can decide what to do depending on the service. For example, it does not make sense for an application to continue operating normally if a crucial service cannot be provided. If there is more than one provider for a service, the application should continue and maybe display a warning about not being able to load a certain service provider.