The main thing about synchronicity that we're relying on here is that Appenders are called synchronously. To relieve the performance issues with doing that on blocking appenders, a user can use async loggers or an async appender wrapper for simplicity. However, I don't see why an appender couldn't be asynchronously implemented.
Adding more explicit support for asynchronous appenders (e.g., a sort of promise-based API) would be a different story since I think all of our current appenders use synchronous APIs (except maybe ListAppender?). On 12 December 2016 at 12:55, Gary Gregory <garydgreg...@gmail.com> wrote: > On Mon, Dec 12, 2016 at 9:30 AM, Matt Sicker <boa...@gmail.com> wrote: > >> There was talk about making NIO/channel-based appenders that would get >> nearly async performance without using async loggers or appenders. I'm not >> so sure that making an appender's implementation asynchronous/non-blocking >> is against the architecture. >> > > We do not specify that appender MUST be synchronous anywhere: > > - https://logging.apache.org/log4j/2.x/manual/architecture.html > - https://logging.apache.org/log4j/2.x/manual/appenders.html > - https://logging.apache.org/log4j/2.x/log4j-core/apidocs/ > org/apache/logging/log4j/core/Appender.html > > We do talk about how to make code paths explicitly _asynchronous_. > > I seems quite OK to surface whatever bells and whistle the underlying > library provides for an appender. I do not see why we should lock users out > of these feature. For me, it's about give users choices and documenting > them. > > Gary > > > >> Though adding API support for Future or CompleteableFuture or something >> similar would be interesting. It could certainly open up some avenues for >> asynchronous optimizations or new ideas. >> >> On 12 December 2016 at 11:16, Mikael Ståldal <mikael.stal...@magine.com> >> wrote: >> >>> This issue: https://issues.apache.org/jira/browse/LOG4J2-1733 >>> raises an architectural issue. >>> >>> As far as I understand, Log4j assumes that regular appenders (the >>> AsyncAppender is a special case) to be synchronous, and >>> provides AsyncAppender and async loggers if you want async behavior. >>> >>> It would be easy to fulfill LOG4J2-1733 and add an option to make >>> KafkaAppeder asynchronous. But that that would violate the contract, and >>> might cause problems that are not so easy to foresee. >>> >>> However, refusing LOG4J2-1733 and insisting in keeping all appenders >>> synchronous, even when real async I/O is available, will limit performance. >>> >>> Should we refine the appender interface and explicitly allow them to be >>> asynchronous, changing AsyncAppender and parts of core to make use of this >>> to optimize processing? >>> >>> Thoughts? >>> >>> -- >>> [image: MagineTV] >>> >>> *Mikael Ståldal* >>> Senior software developer >>> >>> *Magine TV* >>> mikael.stal...@magine.com >>> Grev Turegatan 3 | 114 46 Stockholm, Sweden | www.magine.com >>> >>> Privileged and/or Confidential Information may be contained in this >>> message. If you are not the addressee indicated in this message >>> (or responsible for delivery of the message to such a person), you may >>> not copy or deliver this message to anyone. In such case, >>> you should destroy this message and kindly notify the sender by reply >>> email. >>> >> >> >> >> -- >> Matt Sicker <boa...@gmail.com> >> > > > > -- > E-Mail: garydgreg...@gmail.com | ggreg...@apache.org > Java Persistence with Hibernate, Second Edition > <https://www.amazon.com/gp/product/1617290459/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1617290459&linkCode=as2&tag=garygregory-20&linkId=cadb800f39946ec62ea2b1af9fe6a2b8> > > <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1617290459> > JUnit in Action, Second Edition > <https://www.amazon.com/gp/product/1935182021/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182021&linkCode=as2&tag=garygregory-20&linkId=31ecd1f6b6d1eaf8886ac902a24de418%22> > > <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182021> > Spring Batch in Action > <https://www.amazon.com/gp/product/1935182951/ref=as_li_tl?ie=UTF8&camp=1789&creative=9325&creativeASIN=1935182951&linkCode=%7B%7BlinkCode%7D%7D&tag=garygregory-20&linkId=%7B%7Blink_id%7D%7D%22%3ESpring+Batch+in+Action> > <http:////ir-na.amazon-adsystem.com/e/ir?t=garygregory-20&l=am2&o=1&a=1935182951> > Blog: http://garygregory.wordpress.com > Home: http://garygregory.com/ > Tweet! http://twitter.com/GaryGregory > -- Matt Sicker <boa...@gmail.com>