
SLF4J / SLF4J-526 [Open] Idea for fluent API improvement ============================== Here's what changed in this issue in the last few minutes. There is 1 comment. View or comment on issue using this link https://jira.qos.ch/browse/SLF4J-526 ============================== 1 comment ------------------------------ Adrian Shum on 22/Mar/22 12:53 AM @ceki+jira Great to know! :) some other ideas for the initial proposal, which I dunno if make sense: * By default, return a thread-local instance of builder which can ** reduce cost of allocating new one every time ** could provide detection of missing log(), by checking if builder.log() has been called at atXxx() ** Although above should serve 99.9% of use case, if someone really need a separate instance of builder (e.g. they are building up multiple log messages at the same time), we could provide an extra atXxx() method which will return new instance * It may make sense to allow providing message/messageProvider at the atXxx() method directly. So to demonstrate the idea: {code:java} ////////////////////////////////////////////////////////////////////// // reduced builder allocation ////////////////////////////////////////////////////////////////////// logger.atDebug().message("first log {}").arg(a1).log(); // returning a thread local instance of builder logger.atDebug().message("second log {}").arg(a2).log(); // the builder instance we use here will be the same as above logger.atDebug().message("forgot to call log()"); logger.atDebug().message("fourth log{}").log(); // when we call atDebug(), it check if the builder is "clear". If not, give a warning or automatically call the log()? ////////////////////////////////////////////////////////////////////// // if people really wants to have multiple instances of builder ////////////////////////////////////////////////////////////////////// outputBuilder = logger.atDebug(AllocationType::NEW); // default one is SINGLETON maybe, which means single one per-thread errorBuilder = logger.atDebug(AllocationType::NEW); // bunch of logic to construct log by outputBuilder and errorBuilder outputBuilder.log(); errorBuilder.log(); (of course, user will not enjoy the auto-detection of missing log()) ////////////////////////////////////////////////////////////////////// // we could provide message directly ////////////////////////////////////////////////////////////////////// logger.atDebug("temperature is {}").arg(temperature).log(); {code} ============================== This message was sent by Atlassian Jira (v8.8.0#808000-sha1:e2c7e59)