Ceki,

SLF4J has methods that take discrete parameters so that it can avoid 
constructing the LoggingEvent if it does’t need to. This kind of turns that 
upside down.  That said, Lambdas create an object that contains the expensive 
logic to execute, without executing that logic until necessary. Typically the 
cost of creating the Lambda objects is insignificant.  Log4j 2 already supports 
Lambdas while still only requiring Java 7 - we just use our own Supplier 
interface. 

I am not sure I see how what you are proposing here correlates at all to what 
using lambda expressions achieves. In your proposal the user has to construct 
the LoggingEvent before calling the log method, which implies that the whole 
thing needs to be wrapped in an if (logger.isDebugEnabled()) block. Lambdas 
free you from that.

OTOH, it was proposed to you years ago that SLF4J accept Messages [1] - as 
Log4j 2 does now. I believe this yields more gains than what one would get with 
your proposal. I think exposing a LoggingEvent that includes the Marker and 
Level is a bad idea. While the Message interface allows for users to log 
complex objects, it does so by only solving for that problem and does not 
introduce fields that really have nothing to do with the message content being 
delivered.

Although a bit off topic, I should point out that if SLF4J provided an 
AbstractLogger class that the impact of adding new methods to the Logger 
interface would pretty much be a non-issue. Most of the time the class 
extending AbstractLogger wouldn’t need to change. Currently the Log4j 2 API has 
192 methods. If AbstractLogger is extended only 7 methods need to be 
implemented. 

Ralph

[1] http://slf4j.42922.n3.nabble.com/Benefits-of-Message-objects-td3316674.html 
<http://slf4j.42922.n3.nabble.com/Benefits-of-Message-objects-td3316674.html>
_______________________________________________
slf4j-dev mailing list
slf4j-dev@qos.ch
http://mailman.qos.ch/mailman/listinfo/slf4j-dev

Reply via email to