I wrote a big application using DI. The application is composed by a bootstrapper upon initialization, where most dependencies are injected. All is fine.
However, there are some services* that I can't simply inject everywhere. One good example is the Log service. It's a log, so, every single class in the solution may want to use it for debugging or tracing purposes. Not every class is created upon initialization, some are provided by third party (the application is somewhat a framework). Right now, my solution is to use singletons; I even created some wrapper classes for the singleton, so I can inject it where possible.
I was wondering if a better approach would be to use a ServiceLocator in those places. This would complete remove the hard coupling that a singleton causes. Classes would be coupled to the locator, yes, but I could provide any implementation to them.
*In the DDD terminology.
P.S.: I'm using .NET here, but I won't tag it so; I believe the question applies to any language that accepts DI.