title: Logging interface in domain layer
body: <p>I've got some really expensive business logic inside my domain layer where the data must be tracked in order to get a picture of what happened if something fails. Because of this, I want to declare a simple logging interface:</p>
  
  <pre><code>public interface ILogger {
      void Log(LogEntry entry);
  }
  </code></pre>
  
  <p>Now my question is - where does this interface belongs to? Of course logging might be a infrastructure concern (and a little bit of cross layer concern), but if I place it in the infrastructure layer, my domain services don't get access to it. If I place it into the domain layer, I introduce the concept of logging into my domain, which feels awkward.</p>
  
  <p>I'm already using certain concepts from CQRS &amp; EventSourcing inside my application, however throwing a event for like everything that happens with the data inside a domain service seems like an overkill (especially if the data falls into a state that doesn't get returned by a domain service until further transformations have been made.)</p>