Don't pass on logger instance. Let's just create it in the class that needs it. This change also simplifies the interface.
Interface methods are public by default.
Pulled out implementation.
Simplified constructor code that checks if any null value is provided and added test case.