Uploaded image for project: 'Log4j 2'
  1. Log4j 2
  2. LOG4J2-1874

Add ByteBufferDestionation.write(ByteBuffer) and write(byte[], int, int) methods and call them from TextEncoderHelper whenever possible

    Details

    • Type: Improvement
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 2.6
    • Fix Version/s: 2.9.0
    • Component/s: None
    • Labels:
      None

      Description

      Existing ByteBufferDestination API: getByteBuffer() and drain() is designed so that synchronization couldn't be avoided. This doesn't allow to implement LOG4J2-928.

      Github PR: https://github.com/apache/logging-log4j2/pull/71

      Added methods: write(ByteBuffer data) and write(byte[] data, int offset, int length) are designed so that they should care about synchronization themselves, internally, if needed. They should also synchronize with possible concurrent users of the synchronized getByteBuffer() + drain() API. Nevertheless, it allows for ByteBufferDestination implementations to implement write() methods without lock-free.

      TextEncoderHelper (hence StringBuilderEncoder, which delegates it's logic to TextEncoderHelper) is changed so that it calls ByteBufferDestination.write() whenever possible. There is an expectation that most of encoded events fit the thread-local buffers, and write() could be called instead of writing to destination.getByteBuffer() with synchronization.

      The PR also includes a sanity improvement: uses ByteBuffer.arrayOffset() at some places.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                remkop@yahoo.com Remko Popma
                Reporter:
                leventov Roman Leventov
              • Votes:
                0 Vote for this issue
                Watchers:
                4 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: