I am learning about logging frameworks in Java and trying to understand how the components fit together. Could someone briefly explain: What is the difference between an abstraction layer like SLF4J and concrete engines like Log4j and Logback ? How does a message flow from a code statement like logger.info() through SLF4J down to the actual logging engine at runtime?