Property injection is typically used when you can generally rely on a default implementation but want the option of injecting an alternative.
In your example, you might create a DefaultLogger that the class uses unless someone passes in an alternative via a property.
I think there should always be an instance of something, a 'null object' maybe. Checking for null doesn't feel right.
Also, have you considered decoration? Logging is a great example of how decoration can add extra, optional, features.