An effects system would solve the same problem that most dependency injection does. Having it at the language level gives you some benefits, chief of which is that you're writing Kotlin code, and not either some bespoke DSL, or worse XML.
In the given example where is logger actually instantiated/mocked/setup?