Uses the null object pattern for optional logging. PSR-3 compliant.