I agree with the general sentiment that you are over-engineering, or that you are forcibly applying the principle of EVERYTHING MUST BE AN OBJECT which you may have picked up at college / uni. OOP is a methodology of programming, not an ideology.
When it comes to logging, you have a finite number of options.
1) Create a new logger and then throw it away every time you want to log something
2) have a single global logger. (no, I didn't say singleton, I said single global instance, the terms are not synonymous)
3) use a free function, or depending on the language, a static function.
4) pass a logger to every single constructor of every single object your game uses.
It should be obvious from these choices what the correct course of action is. Let the academics continue to think inside their little boxes up there in that ivory tower while you like, get some work done.
Option 4 with IoC wiring app/domain services is best.
Okay, I will talk with my team and see how we can implement that.
BTW thank you to everyone for all your wonderful answers. Even if I don't quote them, it doesn't mean I didn't learn a lot from them.