You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by Mikael Ståldal <mi...@magine.com> on 2016/03/08 13:56:32 UTC

Re: GC lean way to convert StringBuilder to byte[]

I have done some work on this for GelfLayout. Please review branch
gelf-layout-gc-free

Is there any convenient way to unit-test the encode method of a layout? Do
we do that for PatternLayout?

On Wed, Feb 24, 2016 at 11:48 PM, Ralph Goers <ra...@dslextreme.com>
wrote:

> I haven’t had 5 minutes to spare in 3 days. I will try to look at this
> tonight.
>
> Ralph
>
> On Feb 24, 2016, at 3:46 PM, Gary Gregory <ga...@gmail.com> wrote:
>
> On Tue, Feb 23, 2016 at 8:23 AM, Gary Gregory <ga...@gmail.com>
> wrote:
>
>> I see we now have:
>>
>> org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer2
>>
>> Should we
>> deprecate org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer
>> and reimplement everything in terms of Serializer2, even if objects are
>> allocated?
>>
>
> Thoughts on this?
>
> Gary
>
>
>>
>> Gary
>>
>> On Tue, Feb 23, 2016 at 7:59 AM, Remko Popma <re...@gmail.com>
>> wrote:
>>
>>> Layout now extends Encoder so now it has this method:
>>>
>>> encode(LogEvent source, ByteBufferDestination destination)
>>>
>>> PatternLayout implements this method. It delegates the work of
>>> converting the StringBuilder to bytes and writing these bytes into the
>>> ByteBufferDestination to the TextEncoderHelper class. No objects are
>>> created during this conversion.
>>>
>>> The final piece is (Rolling)RandomAccessFileAppender, whose manager
>>> implements ByteBufferDestination. This appender calls the #encode() methos
>>> on the layout (other managers still call Layout#toByteArray).
>>>
>>>
>>>
>>> On Wed, Feb 24, 2016 at 12:47 AM, Mikael Ståldal <
>>> mikael.staldal@magine.com> wrote:
>>>
>>>> I cannot really find it.
>>>>
>>>> On Tue, Feb 23, 2016 at 3:59 PM, Remko Popma <re...@gmail.com>
>>>> wrote:
>>>>
>>>>> Yes, that was implemented in
>>>>> https://issues.apache.org/jira/browse/LOG4J2-1274.
>>>>>
>>>>> Please also see the description and discussion in the epic
>>>>> https://issues.apache.org/jira/browse/LOG4J2-1270.
>>>>>
>>>>> Sent from my iPhone
>>>>>
>>>>> On 2016/02/23, at 23:56, Mikael Ståldal <mi...@magine.com>
>>>>> wrote:
>>>>>
>>>>> Do we have any way to convert a StringBuilder to a byte[], without any
>>>>> intermediate String?
>>>>>
>>>>> It seems like org.apache.logging.log4j.core.util.StringEncoder cannot
>>>>> do it.
>>>>>
>>>>> --
>>>>> [image: MagineTV]
>>>>>
>>>>> *Mikael Ståldal*
>>>>> Senior software developer
>>>>>
>>>>> *Magine TV*
>>>>> mikael.staldal@magine.com
>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>>>>> <http://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.
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> [image: MagineTV]
>>>>
>>>> *Mikael Ståldal*
>>>> Senior software developer
>>>>
>>>> *Magine TV*
>>>> mikael.staldal@magine.com
>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>>>> <http://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.
>>>>
>>>
>>>
>>
>>
>> --
>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>> <gg...@apache.org>
>> Java Persistence with Hibernate, Second Edition
>> <http://www.manning.com/bauer3/>
>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>> Spring Batch in Action <http://www.manning.com/templier/>
>> Blog: http://garygregory.wordpress.com
>> Home: http://garygregory.com/
>> Tweet! http://twitter.com/GaryGregory
>>
>
>
>
> --
> E-Mail: garydgregory@gmail.com | ggregory@apache.org
> <gg...@apache.org>
> Java Persistence with Hibernate, Second Edition
> <http://www.manning.com/bauer3/>
> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
> Spring Batch in Action <http://www.manning.com/templier/>
> Blog: http://garygregory.wordpress.com
> Home: http://garygregory.com/
> Tweet! http://twitter.com/GaryGregory
>
>
>


-- 
[image: MagineTV]

*Mikael Ståldal*
Senior software developer

*Magine TV*
mikael.staldal@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.

Re: GC lean way to convert StringBuilder to byte[]

Posted by Remko Popma <re...@gmail.com>.
Have you tried writing a JMH benchmark to compare your implementation to
the getBytes(String) method?

On Mon, Mar 14, 2016 at 9:03 PM, Mikael Ståldal <mi...@magine.com>
wrote:

> I am mostly unsure about the new method I added to AbstractStringLayout. I
> am quite sure that it works, but will it give at least as good performance
> as the current one in all cases?
>
> protected byte[] getBytes(final CharSequence cseq) {
>     if (useCustomEncoding) { // rely on branch prediction to eliminate this check if false
>         return StringEncoder.encodeSingleByteChars(cseq);
>     }
>     ByteBuffer byteBuffer = charset.encode(CharBuffer.wrap(cseq));
>     if (byteBuffer.hasArray()) {
>         return byteBuffer.array();
>     } else {
>         byte[] bytes = new byte[byteBuffer.remaining()];
>         byteBuffer.get(bytes);
>         return bytes;
>     }
> }
>
>
>
> On Fri, Mar 11, 2016 at 10:56 PM, Remko Popma <re...@gmail.com>
> wrote:
>
>> Mikael,
>> Your changes impact the GelfLayout class mostly, right? Any other class
>> impacted that you want me to take a look at? If not and all tests pass I'd
>> say just go ahead and merge into master.
>>
>> About testing whether it is allocation-free, there is this ticket
>> LOG4J2-1295 <https://issues.apache.org/jira/browse/LOG4J2-1295> that is
>> still open.
>> I'm thinking the Allocation Instrumenter (
>> https://github.com/google/allocation-instrumenter) would serve our
>> purposes quite well here.
>> I just haven't had the bandwidth to look at this in more depth. It
>> probably involves running a test in a separate VM with the -agent startup
>> option. Not sure if we can do that with a normal log4j junit test or
>> whether the test would need to start a separate VM with the proper startup
>> options and then get that the result of that process via a file or
>> something... It would actually be really good if you or someone else could
>> make progress on that Jira, because I currently don't have the bandwidth to
>> look at it yet.
>>
>>
>> On Sat, Mar 12, 2016 at 1:33 AM, Mikael Ståldal <
>> mikael.staldal@magine.com> wrote:
>>
>>> Is it OK to merge to master?
>>>
>>> Remko, can you help me to verify that it is properly allocation-free
>>> (when using
>>> <GelfLayout host="test" compressionType="OFF"/>)?
>>>
>>>
>>> On Tue, Mar 8, 2016 at 5:36 PM, Mikael Ståldal <
>>> mikael.staldal@magine.com> wrote:
>>>
>>>> I did it a bit differently, but now there are unit tests for
>>>> GelfLayout.encode().
>>>>
>>>> On Tue, Mar 8, 2016 at 3:51 PM, Remko Popma <re...@gmail.com>
>>>> wrote:
>>>>
>>>>> I added some tests to PatternLayoutTest, please take a look.
>>>>>
>>>>> On Tue, Mar 8, 2016 at 11:56 PM, Mikael Ståldal <
>>>>> mikael.staldal@magine.com> wrote:
>>>>>
>>>>>> I have done some work on this for GelfLayout. Please review branch
>>>>>> gelf-layout-gc-free
>>>>>>
>>>>>> Is there any convenient way to unit-test the encode method of a
>>>>>> layout? Do we do that for PatternLayout?
>>>>>>
>>>>>> On Wed, Feb 24, 2016 at 11:48 PM, Ralph Goers <
>>>>>> ralph.goers@dslextreme.com> wrote:
>>>>>>
>>>>>>> I haven’t had 5 minutes to spare in 3 days. I will try to look at
>>>>>>> this tonight.
>>>>>>>
>>>>>>> Ralph
>>>>>>>
>>>>>>> On Feb 24, 2016, at 3:46 PM, Gary Gregory <ga...@gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>> On Tue, Feb 23, 2016 at 8:23 AM, Gary Gregory <
>>>>>>> garydgregory@gmail.com> wrote:
>>>>>>>
>>>>>>>> I see we now have:
>>>>>>>>
>>>>>>>>
>>>>>>>> org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer2
>>>>>>>>
>>>>>>>> Should we
>>>>>>>> deprecate org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer
>>>>>>>> and reimplement everything in terms of Serializer2, even if objects are
>>>>>>>> allocated?
>>>>>>>>
>>>>>>>
>>>>>>> Thoughts on this?
>>>>>>>
>>>>>>> Gary
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> Gary
>>>>>>>>
>>>>>>>> On Tue, Feb 23, 2016 at 7:59 AM, Remko Popma <remko.popma@gmail.com
>>>>>>>> > wrote:
>>>>>>>>
>>>>>>>>> Layout now extends Encoder so now it has this method:
>>>>>>>>>
>>>>>>>>> encode(LogEvent source, ByteBufferDestination destination)
>>>>>>>>>
>>>>>>>>> PatternLayout implements this method. It delegates the work of
>>>>>>>>> converting the StringBuilder to bytes and writing these bytes into the
>>>>>>>>> ByteBufferDestination to the TextEncoderHelper class. No objects are
>>>>>>>>> created during this conversion.
>>>>>>>>>
>>>>>>>>> The final piece is (Rolling)RandomAccessFileAppender, whose
>>>>>>>>> manager implements ByteBufferDestination. This appender calls the #encode()
>>>>>>>>> methos on the layout (other managers still call Layout#toByteArray).
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Wed, Feb 24, 2016 at 12:47 AM, Mikael Ståldal <
>>>>>>>>> mikael.staldal@magine.com> wrote:
>>>>>>>>>
>>>>>>>>>> I cannot really find it.
>>>>>>>>>>
>>>>>>>>>> On Tue, Feb 23, 2016 at 3:59 PM, Remko Popma <
>>>>>>>>>> remko.popma@gmail.com> wrote:
>>>>>>>>>>
>>>>>>>>>>> Yes, that was implemented in
>>>>>>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1274.
>>>>>>>>>>>
>>>>>>>>>>> Please also see the description and discussion in the epic
>>>>>>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1270.
>>>>>>>>>>>
>>>>>>>>>>> Sent from my iPhone
>>>>>>>>>>>
>>>>>>>>>>> On 2016/02/23, at 23:56, Mikael Ståldal <
>>>>>>>>>>> mikael.staldal@magine.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>> Do we have any way to convert a StringBuilder to a byte[],
>>>>>>>>>>> without any intermediate String?
>>>>>>>>>>>
>>>>>>>>>>> It seems like org.apache.logging.log4j.core.util.StringEncoder cannot
>>>>>>>>>>> do it.
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> [image: MagineTV]
>>>>>>>>>>>
>>>>>>>>>>> *Mikael Ståldal*
>>>>>>>>>>> Senior software developer
>>>>>>>>>>>
>>>>>>>>>>> *Magine TV*
>>>>>>>>>>> mikael.staldal@magine.com
>>>>>>>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>>>>>>>>>>>   <http://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.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> [image: MagineTV]
>>>>>>>>>>
>>>>>>>>>> *Mikael Ståldal*
>>>>>>>>>> Senior software developer
>>>>>>>>>>
>>>>>>>>>> *Magine TV*
>>>>>>>>>> mikael.staldal@magine.com
>>>>>>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>>>>>>>>>> <http://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.
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>>>>>>> <gg...@apache.org>
>>>>>>>> Java Persistence with Hibernate, Second Edition
>>>>>>>> <http://www.manning.com/bauer3/>
>>>>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>>>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>>>>>> Blog: http://garygregory.wordpress.com
>>>>>>>> Home: http://garygregory.com/
>>>>>>>> Tweet! http://twitter.com/GaryGregory
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>>>>>> <gg...@apache.org>
>>>>>>> Java Persistence with Hibernate, Second Edition
>>>>>>> <http://www.manning.com/bauer3/>
>>>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>>>>> Blog: http://garygregory.wordpress.com
>>>>>>> Home: http://garygregory.com/
>>>>>>> Tweet! http://twitter.com/GaryGregory
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> [image: MagineTV]
>>>>>>
>>>>>> *Mikael Ståldal*
>>>>>> Senior software developer
>>>>>>
>>>>>> *Magine TV*
>>>>>> mikael.staldal@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.
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> [image: MagineTV]
>>>>
>>>> *Mikael Ståldal*
>>>> Senior software developer
>>>>
>>>> *Magine TV*
>>>> mikael.staldal@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.
>>>>
>>>
>>>
>>>
>>> --
>>> [image: MagineTV]
>>>
>>> *Mikael Ståldal*
>>> Senior software developer
>>>
>>> *Magine TV*
>>> mikael.staldal@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.
>>>
>>
>>
>
>
> --
> [image: MagineTV]
>
> *Mikael Ståldal*
> Senior software developer
>
> *Magine TV*
> mikael.staldal@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.
>

Re: GC lean way to convert StringBuilder to byte[]

Posted by Mikael Ståldal <mi...@magine.com>.
It is only used by GelfLayout now, but my intention is that other layouts
should use it as well.

On Mon, Mar 14, 2016 at 11:03 AM, Mikael Ståldal <mi...@magine.com>
wrote:

> I am mostly unsure about the new method I added to AbstractStringLayout. I
> am quite sure that it works, but will it give at least as good performance
> as the current one in all cases?
>
> protected byte[] getBytes(final CharSequence cseq) {
>     if (useCustomEncoding) { // rely on branch prediction to eliminate this check if false
>         return StringEncoder.encodeSingleByteChars(cseq);
>     }
>     ByteBuffer byteBuffer = charset.encode(CharBuffer.wrap(cseq));
>     if (byteBuffer.hasArray()) {
>         return byteBuffer.array();
>     } else {
>         byte[] bytes = new byte[byteBuffer.remaining()];
>         byteBuffer.get(bytes);
>         return bytes;
>     }
> }
>
>
>
> On Fri, Mar 11, 2016 at 10:56 PM, Remko Popma <re...@gmail.com>
> wrote:
>
>> Mikael,
>> Your changes impact the GelfLayout class mostly, right? Any other class
>> impacted that you want me to take a look at? If not and all tests pass I'd
>> say just go ahead and merge into master.
>>
>> About testing whether it is allocation-free, there is this ticket
>> LOG4J2-1295 <https://issues.apache.org/jira/browse/LOG4J2-1295> that is
>> still open.
>> I'm thinking the Allocation Instrumenter (
>> https://github.com/google/allocation-instrumenter) would serve our
>> purposes quite well here.
>> I just haven't had the bandwidth to look at this in more depth. It
>> probably involves running a test in a separate VM with the -agent startup
>> option. Not sure if we can do that with a normal log4j junit test or
>> whether the test would need to start a separate VM with the proper startup
>> options and then get that the result of that process via a file or
>> something... It would actually be really good if you or someone else could
>> make progress on that Jira, because I currently don't have the bandwidth to
>> look at it yet.
>>
>>
>> On Sat, Mar 12, 2016 at 1:33 AM, Mikael Ståldal <
>> mikael.staldal@magine.com> wrote:
>>
>>> Is it OK to merge to master?
>>>
>>> Remko, can you help me to verify that it is properly allocation-free
>>> (when using
>>> <GelfLayout host="test" compressionType="OFF"/>)?
>>>
>>>
>>> On Tue, Mar 8, 2016 at 5:36 PM, Mikael Ståldal <
>>> mikael.staldal@magine.com> wrote:
>>>
>>>> I did it a bit differently, but now there are unit tests for
>>>> GelfLayout.encode().
>>>>
>>>> On Tue, Mar 8, 2016 at 3:51 PM, Remko Popma <re...@gmail.com>
>>>> wrote:
>>>>
>>>>> I added some tests to PatternLayoutTest, please take a look.
>>>>>
>>>>> On Tue, Mar 8, 2016 at 11:56 PM, Mikael Ståldal <
>>>>> mikael.staldal@magine.com> wrote:
>>>>>
>>>>>> I have done some work on this for GelfLayout. Please review branch
>>>>>> gelf-layout-gc-free
>>>>>>
>>>>>> Is there any convenient way to unit-test the encode method of a
>>>>>> layout? Do we do that for PatternLayout?
>>>>>>
>>>>>> On Wed, Feb 24, 2016 at 11:48 PM, Ralph Goers <
>>>>>> ralph.goers@dslextreme.com> wrote:
>>>>>>
>>>>>>> I haven’t had 5 minutes to spare in 3 days. I will try to look at
>>>>>>> this tonight.
>>>>>>>
>>>>>>> Ralph
>>>>>>>
>>>>>>> On Feb 24, 2016, at 3:46 PM, Gary Gregory <ga...@gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>> On Tue, Feb 23, 2016 at 8:23 AM, Gary Gregory <
>>>>>>> garydgregory@gmail.com> wrote:
>>>>>>>
>>>>>>>> I see we now have:
>>>>>>>>
>>>>>>>>
>>>>>>>> org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer2
>>>>>>>>
>>>>>>>> Should we
>>>>>>>> deprecate org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer
>>>>>>>> and reimplement everything in terms of Serializer2, even if objects are
>>>>>>>> allocated?
>>>>>>>>
>>>>>>>
>>>>>>> Thoughts on this?
>>>>>>>
>>>>>>> Gary
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> Gary
>>>>>>>>
>>>>>>>> On Tue, Feb 23, 2016 at 7:59 AM, Remko Popma <remko.popma@gmail.com
>>>>>>>> > wrote:
>>>>>>>>
>>>>>>>>> Layout now extends Encoder so now it has this method:
>>>>>>>>>
>>>>>>>>> encode(LogEvent source, ByteBufferDestination destination)
>>>>>>>>>
>>>>>>>>> PatternLayout implements this method. It delegates the work of
>>>>>>>>> converting the StringBuilder to bytes and writing these bytes into the
>>>>>>>>> ByteBufferDestination to the TextEncoderHelper class. No objects are
>>>>>>>>> created during this conversion.
>>>>>>>>>
>>>>>>>>> The final piece is (Rolling)RandomAccessFileAppender, whose
>>>>>>>>> manager implements ByteBufferDestination. This appender calls the #encode()
>>>>>>>>> methos on the layout (other managers still call Layout#toByteArray).
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Wed, Feb 24, 2016 at 12:47 AM, Mikael Ståldal <
>>>>>>>>> mikael.staldal@magine.com> wrote:
>>>>>>>>>
>>>>>>>>>> I cannot really find it.
>>>>>>>>>>
>>>>>>>>>> On Tue, Feb 23, 2016 at 3:59 PM, Remko Popma <
>>>>>>>>>> remko.popma@gmail.com> wrote:
>>>>>>>>>>
>>>>>>>>>>> Yes, that was implemented in
>>>>>>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1274.
>>>>>>>>>>>
>>>>>>>>>>> Please also see the description and discussion in the epic
>>>>>>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1270.
>>>>>>>>>>>
>>>>>>>>>>> Sent from my iPhone
>>>>>>>>>>>
>>>>>>>>>>> On 2016/02/23, at 23:56, Mikael Ståldal <
>>>>>>>>>>> mikael.staldal@magine.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>> Do we have any way to convert a StringBuilder to a byte[],
>>>>>>>>>>> without any intermediate String?
>>>>>>>>>>>
>>>>>>>>>>> It seems like org.apache.logging.log4j.core.util.StringEncoder cannot
>>>>>>>>>>> do it.
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> [image: MagineTV]
>>>>>>>>>>>
>>>>>>>>>>> *Mikael Ståldal*
>>>>>>>>>>> Senior software developer
>>>>>>>>>>>
>>>>>>>>>>> *Magine TV*
>>>>>>>>>>> mikael.staldal@magine.com
>>>>>>>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>>>>>>>>>>>   <http://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.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> [image: MagineTV]
>>>>>>>>>>
>>>>>>>>>> *Mikael Ståldal*
>>>>>>>>>> Senior software developer
>>>>>>>>>>
>>>>>>>>>> *Magine TV*
>>>>>>>>>> mikael.staldal@magine.com
>>>>>>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>>>>>>>>>> <http://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.
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>>>>>>> <gg...@apache.org>
>>>>>>>> Java Persistence with Hibernate, Second Edition
>>>>>>>> <http://www.manning.com/bauer3/>
>>>>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>>>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>>>>>> Blog: http://garygregory.wordpress.com
>>>>>>>> Home: http://garygregory.com/
>>>>>>>> Tweet! http://twitter.com/GaryGregory
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>>>>>> <gg...@apache.org>
>>>>>>> Java Persistence with Hibernate, Second Edition
>>>>>>> <http://www.manning.com/bauer3/>
>>>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>>>>> Blog: http://garygregory.wordpress.com
>>>>>>> Home: http://garygregory.com/
>>>>>>> Tweet! http://twitter.com/GaryGregory
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> [image: MagineTV]
>>>>>>
>>>>>> *Mikael Ståldal*
>>>>>> Senior software developer
>>>>>>
>>>>>> *Magine TV*
>>>>>> mikael.staldal@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.
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> [image: MagineTV]
>>>>
>>>> *Mikael Ståldal*
>>>> Senior software developer
>>>>
>>>> *Magine TV*
>>>> mikael.staldal@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.
>>>>
>>>
>>>
>>>
>>> --
>>> [image: MagineTV]
>>>
>>> *Mikael Ståldal*
>>> Senior software developer
>>>
>>> *Magine TV*
>>> mikael.staldal@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.
>>>
>>
>>
>
>
> --
> [image: MagineTV]
>
> *Mikael Ståldal*
> Senior software developer
>
> *Magine TV*
> mikael.staldal@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.
>



-- 
[image: MagineTV]

*Mikael Ståldal*
Senior software developer

*Magine TV*
mikael.staldal@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.

Re: GC lean way to convert StringBuilder to byte[]

Posted by Mikael Ståldal <mi...@magine.com>.
I am mostly unsure about the new method I added to AbstractStringLayout. I
am quite sure that it works, but will it give at least as good performance
as the current one in all cases?

protected byte[] getBytes(final CharSequence cseq) {
    if (useCustomEncoding) { // rely on branch prediction to eliminate
this check if false
        return StringEncoder.encodeSingleByteChars(cseq);
    }
    ByteBuffer byteBuffer = charset.encode(CharBuffer.wrap(cseq));
    if (byteBuffer.hasArray()) {
        return byteBuffer.array();
    } else {
        byte[] bytes = new byte[byteBuffer.remaining()];
        byteBuffer.get(bytes);
        return bytes;
    }
}



On Fri, Mar 11, 2016 at 10:56 PM, Remko Popma <re...@gmail.com> wrote:

> Mikael,
> Your changes impact the GelfLayout class mostly, right? Any other class
> impacted that you want me to take a look at? If not and all tests pass I'd
> say just go ahead and merge into master.
>
> About testing whether it is allocation-free, there is this ticket
> LOG4J2-1295 <https://issues.apache.org/jira/browse/LOG4J2-1295> that is
> still open.
> I'm thinking the Allocation Instrumenter (
> https://github.com/google/allocation-instrumenter) would serve our
> purposes quite well here.
> I just haven't had the bandwidth to look at this in more depth. It
> probably involves running a test in a separate VM with the -agent startup
> option. Not sure if we can do that with a normal log4j junit test or
> whether the test would need to start a separate VM with the proper startup
> options and then get that the result of that process via a file or
> something... It would actually be really good if you or someone else could
> make progress on that Jira, because I currently don't have the bandwidth to
> look at it yet.
>
>
> On Sat, Mar 12, 2016 at 1:33 AM, Mikael Ståldal <mikael.staldal@magine.com
> > wrote:
>
>> Is it OK to merge to master?
>>
>> Remko, can you help me to verify that it is properly allocation-free
>> (when using
>> <GelfLayout host="test" compressionType="OFF"/>)?
>>
>>
>> On Tue, Mar 8, 2016 at 5:36 PM, Mikael Ståldal <mikael.staldal@magine.com
>> > wrote:
>>
>>> I did it a bit differently, but now there are unit tests for
>>> GelfLayout.encode().
>>>
>>> On Tue, Mar 8, 2016 at 3:51 PM, Remko Popma <re...@gmail.com>
>>> wrote:
>>>
>>>> I added some tests to PatternLayoutTest, please take a look.
>>>>
>>>> On Tue, Mar 8, 2016 at 11:56 PM, Mikael Ståldal <
>>>> mikael.staldal@magine.com> wrote:
>>>>
>>>>> I have done some work on this for GelfLayout. Please review branch
>>>>> gelf-layout-gc-free
>>>>>
>>>>> Is there any convenient way to unit-test the encode method of a
>>>>> layout? Do we do that for PatternLayout?
>>>>>
>>>>> On Wed, Feb 24, 2016 at 11:48 PM, Ralph Goers <
>>>>> ralph.goers@dslextreme.com> wrote:
>>>>>
>>>>>> I haven’t had 5 minutes to spare in 3 days. I will try to look at
>>>>>> this tonight.
>>>>>>
>>>>>> Ralph
>>>>>>
>>>>>> On Feb 24, 2016, at 3:46 PM, Gary Gregory <ga...@gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>> On Tue, Feb 23, 2016 at 8:23 AM, Gary Gregory <garydgregory@gmail.com
>>>>>> > wrote:
>>>>>>
>>>>>>> I see we now have:
>>>>>>>
>>>>>>> org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer2
>>>>>>>
>>>>>>> Should we
>>>>>>> deprecate org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer
>>>>>>> and reimplement everything in terms of Serializer2, even if objects are
>>>>>>> allocated?
>>>>>>>
>>>>>>
>>>>>> Thoughts on this?
>>>>>>
>>>>>> Gary
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> Gary
>>>>>>>
>>>>>>> On Tue, Feb 23, 2016 at 7:59 AM, Remko Popma <re...@gmail.com>
>>>>>>>  wrote:
>>>>>>>
>>>>>>>> Layout now extends Encoder so now it has this method:
>>>>>>>>
>>>>>>>> encode(LogEvent source, ByteBufferDestination destination)
>>>>>>>>
>>>>>>>> PatternLayout implements this method. It delegates the work of
>>>>>>>> converting the StringBuilder to bytes and writing these bytes into the
>>>>>>>> ByteBufferDestination to the TextEncoderHelper class. No objects are
>>>>>>>> created during this conversion.
>>>>>>>>
>>>>>>>> The final piece is (Rolling)RandomAccessFileAppender, whose manager
>>>>>>>> implements ByteBufferDestination. This appender calls the #encode() methos
>>>>>>>> on the layout (other managers still call Layout#toByteArray).
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Wed, Feb 24, 2016 at 12:47 AM, Mikael Ståldal <
>>>>>>>> mikael.staldal@magine.com> wrote:
>>>>>>>>
>>>>>>>>> I cannot really find it.
>>>>>>>>>
>>>>>>>>> On Tue, Feb 23, 2016 at 3:59 PM, Remko Popma <
>>>>>>>>> remko.popma@gmail.com> wrote:
>>>>>>>>>
>>>>>>>>>> Yes, that was implemented in
>>>>>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1274.
>>>>>>>>>>
>>>>>>>>>> Please also see the description and discussion in the epic
>>>>>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1270.
>>>>>>>>>>
>>>>>>>>>> Sent from my iPhone
>>>>>>>>>>
>>>>>>>>>> On 2016/02/23, at 23:56, Mikael Ståldal <
>>>>>>>>>> mikael.staldal@magine.com> wrote:
>>>>>>>>>>
>>>>>>>>>> Do we have any way to convert a StringBuilder to a byte[],
>>>>>>>>>> without any intermediate String?
>>>>>>>>>>
>>>>>>>>>> It seems like org.apache.logging.log4j.core.util.StringEncoder cannot
>>>>>>>>>> do it.
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> [image: MagineTV]
>>>>>>>>>>
>>>>>>>>>> *Mikael Ståldal*
>>>>>>>>>> Senior software developer
>>>>>>>>>>
>>>>>>>>>> *Magine TV*
>>>>>>>>>> mikael.staldal@magine.com
>>>>>>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>>>>>>>>>> <http://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.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> [image: MagineTV]
>>>>>>>>>
>>>>>>>>> *Mikael Ståldal*
>>>>>>>>> Senior software developer
>>>>>>>>>
>>>>>>>>> *Magine TV*
>>>>>>>>> mikael.staldal@magine.com
>>>>>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>>>>>>>>> <http://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.
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>>>>>> <gg...@apache.org>
>>>>>>> Java Persistence with Hibernate, Second Edition
>>>>>>> <http://www.manning.com/bauer3/>
>>>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>>>>> Blog: http://garygregory.wordpress.com
>>>>>>> Home: http://garygregory.com/
>>>>>>> Tweet! http://twitter.com/GaryGregory
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>>>>> <gg...@apache.org>
>>>>>> Java Persistence with Hibernate, Second Edition
>>>>>> <http://www.manning.com/bauer3/>
>>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>>>> Blog: http://garygregory.wordpress.com
>>>>>> Home: http://garygregory.com/
>>>>>> Tweet! http://twitter.com/GaryGregory
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> [image: MagineTV]
>>>>>
>>>>> *Mikael Ståldal*
>>>>> Senior software developer
>>>>>
>>>>> *Magine TV*
>>>>> mikael.staldal@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.
>>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> [image: MagineTV]
>>>
>>> *Mikael Ståldal*
>>> Senior software developer
>>>
>>> *Magine TV*
>>> mikael.staldal@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.
>>>
>>
>>
>>
>> --
>> [image: MagineTV]
>>
>> *Mikael Ståldal*
>> Senior software developer
>>
>> *Magine TV*
>> mikael.staldal@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.
>>
>
>


-- 
[image: MagineTV]

*Mikael Ståldal*
Senior software developer

*Magine TV*
mikael.staldal@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.

Re: GC lean way to convert StringBuilder to byte[]

Posted by Matt Sicker <bo...@gmail.com>.
Why won't this hyperlink? Try again:

https://www.jclarity.com/product/censum-free-trial/

On 11 March 2016 at 16:26, Matt Sicker <bo...@gmail.com> wrote:

> Also, I mentioned this before in another thread:
>
> https://www.jclarity.com/product/censum-free-trial/
>
> This company will also give us licenses. It looks super useful for this
> scenario.
>
> On 11 March 2016 at 16:25, Matt Sicker <bo...@gmail.com> wrote:
>
>> YourKit gives us all licenses. We even mention them here:
>> http://logging.apache.org/log4j/2.x/thanks.html
>>
>> On 11 March 2016 at 16:21, Gary Gregory <ga...@gmail.com> wrote:
>>
>>> I have YourKit at work. Let me know what it is exactly you want to look
>>> at. Or you can get a free eval for a while. I'm not sure if we have a
>>> special deal with them for Apache or FOSS. Worth asking tho.
>>>
>>> G
>>>
>>> On Fri, Mar 11, 2016 at 1:56 PM, Remko Popma <re...@gmail.com>
>>> wrote:
>>>
>>>> Mikael,
>>>> Your changes impact the GelfLayout class mostly, right? Any other class
>>>> impacted that you want me to take a look at? If not and all tests pass I'd
>>>> say just go ahead and merge into master.
>>>>
>>>> About testing whether it is allocation-free, there is this ticket
>>>> LOG4J2-1295 <https://issues.apache.org/jira/browse/LOG4J2-1295> that
>>>> is still open.
>>>> I'm thinking the Allocation Instrumenter (
>>>> https://github.com/google/allocation-instrumenter) would serve our
>>>> purposes quite well here.
>>>> I just haven't had the bandwidth to look at this in more depth. It
>>>> probably involves running a test in a separate VM with the -agent startup
>>>> option. Not sure if we can do that with a normal log4j junit test or
>>>> whether the test would need to start a separate VM with the proper startup
>>>> options and then get that the result of that process via a file or
>>>> something... It would actually be really good if you or someone else could
>>>> make progress on that Jira, because I currently don't have the bandwidth to
>>>> look at it yet.
>>>>
>>>>
>>>> On Sat, Mar 12, 2016 at 1:33 AM, Mikael Ståldal <
>>>> mikael.staldal@magine.com> wrote:
>>>>
>>>>> Is it OK to merge to master?
>>>>>
>>>>> Remko, can you help me to verify that it is properly allocation-free
>>>>> (when using
>>>>> <GelfLayout host="test" compressionType="OFF"/>)?
>>>>>
>>>>>
>>>>> On Tue, Mar 8, 2016 at 5:36 PM, Mikael Ståldal <
>>>>> mikael.staldal@magine.com> wrote:
>>>>>
>>>>>> I did it a bit differently, but now there are unit tests for
>>>>>> GelfLayout.encode().
>>>>>>
>>>>>> On Tue, Mar 8, 2016 at 3:51 PM, Remko Popma <re...@gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> I added some tests to PatternLayoutTest, please take a look.
>>>>>>>
>>>>>>> On Tue, Mar 8, 2016 at 11:56 PM, Mikael Ståldal <
>>>>>>> mikael.staldal@magine.com> wrote:
>>>>>>>
>>>>>>>> I have done some work on this for GelfLayout. Please review branch
>>>>>>>> gelf-layout-gc-free
>>>>>>>>
>>>>>>>> Is there any convenient way to unit-test the encode method of a
>>>>>>>> layout? Do we do that for PatternLayout?
>>>>>>>>
>>>>>>>> On Wed, Feb 24, 2016 at 11:48 PM, Ralph Goers <
>>>>>>>> ralph.goers@dslextreme.com> wrote:
>>>>>>>>
>>>>>>>>> I haven’t had 5 minutes to spare in 3 days. I will try to look at
>>>>>>>>> this tonight.
>>>>>>>>>
>>>>>>>>> Ralph
>>>>>>>>>
>>>>>>>>> On Feb 24, 2016, at 3:46 PM, Gary Gregory <ga...@gmail.com>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>> On Tue, Feb 23, 2016 at 8:23 AM, Gary Gregory <
>>>>>>>>> garydgregory@gmail.com> wrote:
>>>>>>>>>
>>>>>>>>>> I see we now have:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer2
>>>>>>>>>>
>>>>>>>>>> Should we
>>>>>>>>>> deprecate org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer
>>>>>>>>>> and reimplement everything in terms of Serializer2, even if objects are
>>>>>>>>>> allocated?
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Thoughts on this?
>>>>>>>>>
>>>>>>>>> Gary
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Gary
>>>>>>>>>>
>>>>>>>>>> On Tue, Feb 23, 2016 at 7:59 AM, Remko Popma <
>>>>>>>>>> remko.popma@gmail.com> wrote:
>>>>>>>>>>
>>>>>>>>>>> Layout now extends Encoder so now it has this method:
>>>>>>>>>>>
>>>>>>>>>>> encode(LogEvent source, ByteBufferDestination destination)
>>>>>>>>>>>
>>>>>>>>>>> PatternLayout implements this method. It delegates the work of
>>>>>>>>>>> converting the StringBuilder to bytes and writing these bytes into the
>>>>>>>>>>> ByteBufferDestination to the TextEncoderHelper class. No objects are
>>>>>>>>>>> created during this conversion.
>>>>>>>>>>>
>>>>>>>>>>> The final piece is (Rolling)RandomAccessFileAppender, whose
>>>>>>>>>>> manager implements ByteBufferDestination. This appender calls the #encode()
>>>>>>>>>>> methos on the layout (other managers still call Layout#toByteArray).
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Wed, Feb 24, 2016 at 12:47 AM, Mikael Ståldal <
>>>>>>>>>>> mikael.staldal@magine.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> I cannot really find it.
>>>>>>>>>>>>
>>>>>>>>>>>> On Tue, Feb 23, 2016 at 3:59 PM, Remko Popma <
>>>>>>>>>>>> remko.popma@gmail.com> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Yes, that was implemented in
>>>>>>>>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1274.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Please also see the description and discussion in the epic
>>>>>>>>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1270.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Sent from my iPhone
>>>>>>>>>>>>>
>>>>>>>>>>>>> On 2016/02/23, at 23:56, Mikael Ståldal <
>>>>>>>>>>>>> mikael.staldal@magine.com> wrote:
>>>>>>>>>>>>>
>>>>>>>>>>>>> Do we have any way to convert a StringBuilder to a byte[],
>>>>>>>>>>>>> without any intermediate String?
>>>>>>>>>>>>>
>>>>>>>>>>>>> It seems like org.apache.logging.log4j.core.util.
>>>>>>>>>>>>> StringEncoder cannot do it.
>>>>>>>>>>>>>
>>>>>>>>>>>>> --
>>>>>>>>>>>>> [image: MagineTV]
>>>>>>>>>>>>>
>>>>>>>>>>>>> *Mikael Ståldal*
>>>>>>>>>>>>> Senior software developer
>>>>>>>>>>>>>
>>>>>>>>>>>>> *Magine TV*
>>>>>>>>>>>>> mikael.staldal@magine.com
>>>>>>>>>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |
>>>>>>>>>>>>> www.magine.com  <http://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.
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> [image: MagineTV]
>>>>>>>>>>>>
>>>>>>>>>>>> *Mikael Ståldal*
>>>>>>>>>>>> Senior software developer
>>>>>>>>>>>>
>>>>>>>>>>>> *Magine TV*
>>>>>>>>>>>> mikael.staldal@magine.com
>>>>>>>>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |
>>>>>>>>>>>> www.magine.com  <http://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.
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>>>>>>>>> <gg...@apache.org>
>>>>>>>>>> Java Persistence with Hibernate, Second Edition
>>>>>>>>>> <http://www.manning.com/bauer3/>
>>>>>>>>>> JUnit in Action, Second Edition
>>>>>>>>>> <http://www.manning.com/tahchiev/>
>>>>>>>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>>>>>>>> Blog: http://garygregory.wordpress.com
>>>>>>>>>> Home: http://garygregory.com/
>>>>>>>>>> Tweet! http://twitter.com/GaryGregory
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>>>>>>>> <gg...@apache.org>
>>>>>>>>> Java Persistence with Hibernate, Second Edition
>>>>>>>>> <http://www.manning.com/bauer3/>
>>>>>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>>>>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>>>>>>> Blog: http://garygregory.wordpress.com
>>>>>>>>> Home: http://garygregory.com/
>>>>>>>>> Tweet! http://twitter.com/GaryGregory
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> [image: MagineTV]
>>>>>>>>
>>>>>>>> *Mikael Ståldal*
>>>>>>>> Senior software developer
>>>>>>>>
>>>>>>>> *Magine TV*
>>>>>>>> mikael.staldal@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.
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> [image: MagineTV]
>>>>>>
>>>>>> *Mikael Ståldal*
>>>>>> Senior software developer
>>>>>>
>>>>>> *Magine TV*
>>>>>> mikael.staldal@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.
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> [image: MagineTV]
>>>>>
>>>>> *Mikael Ståldal*
>>>>> Senior software developer
>>>>>
>>>>> *Magine TV*
>>>>> mikael.staldal@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.
>>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>> Java Persistence with Hibernate, Second Edition
>>> <http://www.manning.com/bauer3/>
>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>> Spring Batch in Action <http://www.manning.com/templier/>
>>> Blog: http://garygregory.wordpress.com
>>> Home: http://garygregory.com/
>>> Tweet! http://twitter.com/GaryGregory
>>>
>>
>>
>>
>> --
>> Matt Sicker <bo...@gmail.com>
>>
>
>
>
> --
> Matt Sicker <bo...@gmail.com>
>



-- 
Matt Sicker <bo...@gmail.com>

Re: GC lean way to convert StringBuilder to byte[]

Posted by Matt Sicker <bo...@gmail.com>.
Also, I mentioned this before in another thread:

https://www.jclarity.com/product/censum-free-trial/

This company will also give us licenses. It looks super useful for this
scenario.

On 11 March 2016 at 16:25, Matt Sicker <bo...@gmail.com> wrote:

> YourKit gives us all licenses. We even mention them here:
> http://logging.apache.org/log4j/2.x/thanks.html
>
> On 11 March 2016 at 16:21, Gary Gregory <ga...@gmail.com> wrote:
>
>> I have YourKit at work. Let me know what it is exactly you want to look
>> at. Or you can get a free eval for a while. I'm not sure if we have a
>> special deal with them for Apache or FOSS. Worth asking tho.
>>
>> G
>>
>> On Fri, Mar 11, 2016 at 1:56 PM, Remko Popma <re...@gmail.com>
>> wrote:
>>
>>> Mikael,
>>> Your changes impact the GelfLayout class mostly, right? Any other class
>>> impacted that you want me to take a look at? If not and all tests pass I'd
>>> say just go ahead and merge into master.
>>>
>>> About testing whether it is allocation-free, there is this ticket
>>> LOG4J2-1295 <https://issues.apache.org/jira/browse/LOG4J2-1295> that is
>>> still open.
>>> I'm thinking the Allocation Instrumenter (
>>> https://github.com/google/allocation-instrumenter) would serve our
>>> purposes quite well here.
>>> I just haven't had the bandwidth to look at this in more depth. It
>>> probably involves running a test in a separate VM with the -agent startup
>>> option. Not sure if we can do that with a normal log4j junit test or
>>> whether the test would need to start a separate VM with the proper startup
>>> options and then get that the result of that process via a file or
>>> something... It would actually be really good if you or someone else could
>>> make progress on that Jira, because I currently don't have the bandwidth to
>>> look at it yet.
>>>
>>>
>>> On Sat, Mar 12, 2016 at 1:33 AM, Mikael Ståldal <
>>> mikael.staldal@magine.com> wrote:
>>>
>>>> Is it OK to merge to master?
>>>>
>>>> Remko, can you help me to verify that it is properly allocation-free
>>>> (when using
>>>> <GelfLayout host="test" compressionType="OFF"/>)?
>>>>
>>>>
>>>> On Tue, Mar 8, 2016 at 5:36 PM, Mikael Ståldal <
>>>> mikael.staldal@magine.com> wrote:
>>>>
>>>>> I did it a bit differently, but now there are unit tests for
>>>>> GelfLayout.encode().
>>>>>
>>>>> On Tue, Mar 8, 2016 at 3:51 PM, Remko Popma <re...@gmail.com>
>>>>> wrote:
>>>>>
>>>>>> I added some tests to PatternLayoutTest, please take a look.
>>>>>>
>>>>>> On Tue, Mar 8, 2016 at 11:56 PM, Mikael Ståldal <
>>>>>> mikael.staldal@magine.com> wrote:
>>>>>>
>>>>>>> I have done some work on this for GelfLayout. Please review branch
>>>>>>> gelf-layout-gc-free
>>>>>>>
>>>>>>> Is there any convenient way to unit-test the encode method of a
>>>>>>> layout? Do we do that for PatternLayout?
>>>>>>>
>>>>>>> On Wed, Feb 24, 2016 at 11:48 PM, Ralph Goers <
>>>>>>> ralph.goers@dslextreme.com> wrote:
>>>>>>>
>>>>>>>> I haven’t had 5 minutes to spare in 3 days. I will try to look at
>>>>>>>> this tonight.
>>>>>>>>
>>>>>>>> Ralph
>>>>>>>>
>>>>>>>> On Feb 24, 2016, at 3:46 PM, Gary Gregory <ga...@gmail.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>> On Tue, Feb 23, 2016 at 8:23 AM, Gary Gregory <
>>>>>>>> garydgregory@gmail.com> wrote:
>>>>>>>>
>>>>>>>>> I see we now have:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer2
>>>>>>>>>
>>>>>>>>> Should we
>>>>>>>>> deprecate org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer
>>>>>>>>> and reimplement everything in terms of Serializer2, even if objects are
>>>>>>>>> allocated?
>>>>>>>>>
>>>>>>>>
>>>>>>>> Thoughts on this?
>>>>>>>>
>>>>>>>> Gary
>>>>>>>>
>>>>>>>>
>>>>>>>>>
>>>>>>>>> Gary
>>>>>>>>>
>>>>>>>>> On Tue, Feb 23, 2016 at 7:59 AM, Remko Popma <
>>>>>>>>> remko.popma@gmail.com> wrote:
>>>>>>>>>
>>>>>>>>>> Layout now extends Encoder so now it has this method:
>>>>>>>>>>
>>>>>>>>>> encode(LogEvent source, ByteBufferDestination destination)
>>>>>>>>>>
>>>>>>>>>> PatternLayout implements this method. It delegates the work of
>>>>>>>>>> converting the StringBuilder to bytes and writing these bytes into the
>>>>>>>>>> ByteBufferDestination to the TextEncoderHelper class. No objects are
>>>>>>>>>> created during this conversion.
>>>>>>>>>>
>>>>>>>>>> The final piece is (Rolling)RandomAccessFileAppender, whose
>>>>>>>>>> manager implements ByteBufferDestination. This appender calls the #encode()
>>>>>>>>>> methos on the layout (other managers still call Layout#toByteArray).
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Wed, Feb 24, 2016 at 12:47 AM, Mikael Ståldal <
>>>>>>>>>> mikael.staldal@magine.com> wrote:
>>>>>>>>>>
>>>>>>>>>>> I cannot really find it.
>>>>>>>>>>>
>>>>>>>>>>> On Tue, Feb 23, 2016 at 3:59 PM, Remko Popma <
>>>>>>>>>>> remko.popma@gmail.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Yes, that was implemented in
>>>>>>>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1274.
>>>>>>>>>>>>
>>>>>>>>>>>> Please also see the description and discussion in the epic
>>>>>>>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1270.
>>>>>>>>>>>>
>>>>>>>>>>>> Sent from my iPhone
>>>>>>>>>>>>
>>>>>>>>>>>> On 2016/02/23, at 23:56, Mikael Ståldal <
>>>>>>>>>>>> mikael.staldal@magine.com> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>> Do we have any way to convert a StringBuilder to a byte[],
>>>>>>>>>>>> without any intermediate String?
>>>>>>>>>>>>
>>>>>>>>>>>> It seems like org.apache.logging.log4j.core.util.StringEncoder cannot
>>>>>>>>>>>> do it.
>>>>>>>>>>>>
>>>>>>>>>>>> --
>>>>>>>>>>>> [image: MagineTV]
>>>>>>>>>>>>
>>>>>>>>>>>> *Mikael Ståldal*
>>>>>>>>>>>> Senior software developer
>>>>>>>>>>>>
>>>>>>>>>>>> *Magine TV*
>>>>>>>>>>>> mikael.staldal@magine.com
>>>>>>>>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |
>>>>>>>>>>>> www.magine.com  <http://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.
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> [image: MagineTV]
>>>>>>>>>>>
>>>>>>>>>>> *Mikael Ståldal*
>>>>>>>>>>> Senior software developer
>>>>>>>>>>>
>>>>>>>>>>> *Magine TV*
>>>>>>>>>>> mikael.staldal@magine.com
>>>>>>>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>>>>>>>>>>>   <http://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.
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>>>>>>>> <gg...@apache.org>
>>>>>>>>> Java Persistence with Hibernate, Second Edition
>>>>>>>>> <http://www.manning.com/bauer3/>
>>>>>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>>>>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>>>>>>> Blog: http://garygregory.wordpress.com
>>>>>>>>> Home: http://garygregory.com/
>>>>>>>>> Tweet! http://twitter.com/GaryGregory
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>>>>>>> <gg...@apache.org>
>>>>>>>> Java Persistence with Hibernate, Second Edition
>>>>>>>> <http://www.manning.com/bauer3/>
>>>>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>>>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>>>>>> Blog: http://garygregory.wordpress.com
>>>>>>>> Home: http://garygregory.com/
>>>>>>>> Tweet! http://twitter.com/GaryGregory
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> [image: MagineTV]
>>>>>>>
>>>>>>> *Mikael Ståldal*
>>>>>>> Senior software developer
>>>>>>>
>>>>>>> *Magine TV*
>>>>>>> mikael.staldal@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.
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> [image: MagineTV]
>>>>>
>>>>> *Mikael Ståldal*
>>>>> Senior software developer
>>>>>
>>>>> *Magine TV*
>>>>> mikael.staldal@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.
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> [image: MagineTV]
>>>>
>>>> *Mikael Ståldal*
>>>> Senior software developer
>>>>
>>>> *Magine TV*
>>>> mikael.staldal@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.
>>>>
>>>
>>>
>>
>>
>> --
>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>> Java Persistence with Hibernate, Second Edition
>> <http://www.manning.com/bauer3/>
>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>> Spring Batch in Action <http://www.manning.com/templier/>
>> Blog: http://garygregory.wordpress.com
>> Home: http://garygregory.com/
>> Tweet! http://twitter.com/GaryGregory
>>
>
>
>
> --
> Matt Sicker <bo...@gmail.com>
>



-- 
Matt Sicker <bo...@gmail.com>

Re: GC lean way to convert StringBuilder to byte[]

Posted by Matt Sicker <bo...@gmail.com>.
YourKit gives us all licenses. We even mention them here:
http://logging.apache.org/log4j/2.x/thanks.html

On 11 March 2016 at 16:21, Gary Gregory <ga...@gmail.com> wrote:

> I have YourKit at work. Let me know what it is exactly you want to look
> at. Or you can get a free eval for a while. I'm not sure if we have a
> special deal with them for Apache or FOSS. Worth asking tho.
>
> G
>
> On Fri, Mar 11, 2016 at 1:56 PM, Remko Popma <re...@gmail.com>
> wrote:
>
>> Mikael,
>> Your changes impact the GelfLayout class mostly, right? Any other class
>> impacted that you want me to take a look at? If not and all tests pass I'd
>> say just go ahead and merge into master.
>>
>> About testing whether it is allocation-free, there is this ticket
>> LOG4J2-1295 <https://issues.apache.org/jira/browse/LOG4J2-1295> that is
>> still open.
>> I'm thinking the Allocation Instrumenter (
>> https://github.com/google/allocation-instrumenter) would serve our
>> purposes quite well here.
>> I just haven't had the bandwidth to look at this in more depth. It
>> probably involves running a test in a separate VM with the -agent startup
>> option. Not sure if we can do that with a normal log4j junit test or
>> whether the test would need to start a separate VM with the proper startup
>> options and then get that the result of that process via a file or
>> something... It would actually be really good if you or someone else could
>> make progress on that Jira, because I currently don't have the bandwidth to
>> look at it yet.
>>
>>
>> On Sat, Mar 12, 2016 at 1:33 AM, Mikael Ståldal <
>> mikael.staldal@magine.com> wrote:
>>
>>> Is it OK to merge to master?
>>>
>>> Remko, can you help me to verify that it is properly allocation-free
>>> (when using
>>> <GelfLayout host="test" compressionType="OFF"/>)?
>>>
>>>
>>> On Tue, Mar 8, 2016 at 5:36 PM, Mikael Ståldal <
>>> mikael.staldal@magine.com> wrote:
>>>
>>>> I did it a bit differently, but now there are unit tests for
>>>> GelfLayout.encode().
>>>>
>>>> On Tue, Mar 8, 2016 at 3:51 PM, Remko Popma <re...@gmail.com>
>>>> wrote:
>>>>
>>>>> I added some tests to PatternLayoutTest, please take a look.
>>>>>
>>>>> On Tue, Mar 8, 2016 at 11:56 PM, Mikael Ståldal <
>>>>> mikael.staldal@magine.com> wrote:
>>>>>
>>>>>> I have done some work on this for GelfLayout. Please review branch
>>>>>> gelf-layout-gc-free
>>>>>>
>>>>>> Is there any convenient way to unit-test the encode method of a
>>>>>> layout? Do we do that for PatternLayout?
>>>>>>
>>>>>> On Wed, Feb 24, 2016 at 11:48 PM, Ralph Goers <
>>>>>> ralph.goers@dslextreme.com> wrote:
>>>>>>
>>>>>>> I haven’t had 5 minutes to spare in 3 days. I will try to look at
>>>>>>> this tonight.
>>>>>>>
>>>>>>> Ralph
>>>>>>>
>>>>>>> On Feb 24, 2016, at 3:46 PM, Gary Gregory <ga...@gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>> On Tue, Feb 23, 2016 at 8:23 AM, Gary Gregory <
>>>>>>> garydgregory@gmail.com> wrote:
>>>>>>>
>>>>>>>> I see we now have:
>>>>>>>>
>>>>>>>>
>>>>>>>> org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer2
>>>>>>>>
>>>>>>>> Should we
>>>>>>>> deprecate org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer
>>>>>>>> and reimplement everything in terms of Serializer2, even if objects are
>>>>>>>> allocated?
>>>>>>>>
>>>>>>>
>>>>>>> Thoughts on this?
>>>>>>>
>>>>>>> Gary
>>>>>>>
>>>>>>>
>>>>>>>>
>>>>>>>> Gary
>>>>>>>>
>>>>>>>> On Tue, Feb 23, 2016 at 7:59 AM, Remko Popma <remko.popma@gmail.com
>>>>>>>> > wrote:
>>>>>>>>
>>>>>>>>> Layout now extends Encoder so now it has this method:
>>>>>>>>>
>>>>>>>>> encode(LogEvent source, ByteBufferDestination destination)
>>>>>>>>>
>>>>>>>>> PatternLayout implements this method. It delegates the work of
>>>>>>>>> converting the StringBuilder to bytes and writing these bytes into the
>>>>>>>>> ByteBufferDestination to the TextEncoderHelper class. No objects are
>>>>>>>>> created during this conversion.
>>>>>>>>>
>>>>>>>>> The final piece is (Rolling)RandomAccessFileAppender, whose
>>>>>>>>> manager implements ByteBufferDestination. This appender calls the #encode()
>>>>>>>>> methos on the layout (other managers still call Layout#toByteArray).
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Wed, Feb 24, 2016 at 12:47 AM, Mikael Ståldal <
>>>>>>>>> mikael.staldal@magine.com> wrote:
>>>>>>>>>
>>>>>>>>>> I cannot really find it.
>>>>>>>>>>
>>>>>>>>>> On Tue, Feb 23, 2016 at 3:59 PM, Remko Popma <
>>>>>>>>>> remko.popma@gmail.com> wrote:
>>>>>>>>>>
>>>>>>>>>>> Yes, that was implemented in
>>>>>>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1274.
>>>>>>>>>>>
>>>>>>>>>>> Please also see the description and discussion in the epic
>>>>>>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1270.
>>>>>>>>>>>
>>>>>>>>>>> Sent from my iPhone
>>>>>>>>>>>
>>>>>>>>>>> On 2016/02/23, at 23:56, Mikael Ståldal <
>>>>>>>>>>> mikael.staldal@magine.com> wrote:
>>>>>>>>>>>
>>>>>>>>>>> Do we have any way to convert a StringBuilder to a byte[],
>>>>>>>>>>> without any intermediate String?
>>>>>>>>>>>
>>>>>>>>>>> It seems like org.apache.logging.log4j.core.util.StringEncoder cannot
>>>>>>>>>>> do it.
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> [image: MagineTV]
>>>>>>>>>>>
>>>>>>>>>>> *Mikael Ståldal*
>>>>>>>>>>> Senior software developer
>>>>>>>>>>>
>>>>>>>>>>> *Magine TV*
>>>>>>>>>>> mikael.staldal@magine.com
>>>>>>>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>>>>>>>>>>>   <http://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.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> [image: MagineTV]
>>>>>>>>>>
>>>>>>>>>> *Mikael Ståldal*
>>>>>>>>>> Senior software developer
>>>>>>>>>>
>>>>>>>>>> *Magine TV*
>>>>>>>>>> mikael.staldal@magine.com
>>>>>>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>>>>>>>>>> <http://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.
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>>>>>>> <gg...@apache.org>
>>>>>>>> Java Persistence with Hibernate, Second Edition
>>>>>>>> <http://www.manning.com/bauer3/>
>>>>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>>>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>>>>>> Blog: http://garygregory.wordpress.com
>>>>>>>> Home: http://garygregory.com/
>>>>>>>> Tweet! http://twitter.com/GaryGregory
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>>>>>> <gg...@apache.org>
>>>>>>> Java Persistence with Hibernate, Second Edition
>>>>>>> <http://www.manning.com/bauer3/>
>>>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>>>>> Blog: http://garygregory.wordpress.com
>>>>>>> Home: http://garygregory.com/
>>>>>>> Tweet! http://twitter.com/GaryGregory
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> [image: MagineTV]
>>>>>>
>>>>>> *Mikael Ståldal*
>>>>>> Senior software developer
>>>>>>
>>>>>> *Magine TV*
>>>>>> mikael.staldal@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.
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> [image: MagineTV]
>>>>
>>>> *Mikael Ståldal*
>>>> Senior software developer
>>>>
>>>> *Magine TV*
>>>> mikael.staldal@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.
>>>>
>>>
>>>
>>>
>>> --
>>> [image: MagineTV]
>>>
>>> *Mikael Ståldal*
>>> Senior software developer
>>>
>>> *Magine TV*
>>> mikael.staldal@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.
>>>
>>
>>
>
>
> --
> E-Mail: garydgregory@gmail.com | ggregory@apache.org
> Java Persistence with Hibernate, Second Edition
> <http://www.manning.com/bauer3/>
> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
> Spring Batch in Action <http://www.manning.com/templier/>
> Blog: http://garygregory.wordpress.com
> Home: http://garygregory.com/
> Tweet! http://twitter.com/GaryGregory
>



-- 
Matt Sicker <bo...@gmail.com>

Re: GC lean way to convert StringBuilder to byte[]

Posted by Gary Gregory <ga...@gmail.com>.
I have YourKit at work. Let me know what it is exactly you want to look at.
Or you can get a free eval for a while. I'm not sure if we have a special
deal with them for Apache or FOSS. Worth asking tho.

G

On Fri, Mar 11, 2016 at 1:56 PM, Remko Popma <re...@gmail.com> wrote:

> Mikael,
> Your changes impact the GelfLayout class mostly, right? Any other class
> impacted that you want me to take a look at? If not and all tests pass I'd
> say just go ahead and merge into master.
>
> About testing whether it is allocation-free, there is this ticket
> LOG4J2-1295 <https://issues.apache.org/jira/browse/LOG4J2-1295> that is
> still open.
> I'm thinking the Allocation Instrumenter (
> https://github.com/google/allocation-instrumenter) would serve our
> purposes quite well here.
> I just haven't had the bandwidth to look at this in more depth. It
> probably involves running a test in a separate VM with the -agent startup
> option. Not sure if we can do that with a normal log4j junit test or
> whether the test would need to start a separate VM with the proper startup
> options and then get that the result of that process via a file or
> something... It would actually be really good if you or someone else could
> make progress on that Jira, because I currently don't have the bandwidth to
> look at it yet.
>
>
> On Sat, Mar 12, 2016 at 1:33 AM, Mikael Ståldal <mikael.staldal@magine.com
> > wrote:
>
>> Is it OK to merge to master?
>>
>> Remko, can you help me to verify that it is properly allocation-free
>> (when using
>> <GelfLayout host="test" compressionType="OFF"/>)?
>>
>>
>> On Tue, Mar 8, 2016 at 5:36 PM, Mikael Ståldal <mikael.staldal@magine.com
>> > wrote:
>>
>>> I did it a bit differently, but now there are unit tests for
>>> GelfLayout.encode().
>>>
>>> On Tue, Mar 8, 2016 at 3:51 PM, Remko Popma <re...@gmail.com>
>>> wrote:
>>>
>>>> I added some tests to PatternLayoutTest, please take a look.
>>>>
>>>> On Tue, Mar 8, 2016 at 11:56 PM, Mikael Ståldal <
>>>> mikael.staldal@magine.com> wrote:
>>>>
>>>>> I have done some work on this for GelfLayout. Please review branch
>>>>> gelf-layout-gc-free
>>>>>
>>>>> Is there any convenient way to unit-test the encode method of a
>>>>> layout? Do we do that for PatternLayout?
>>>>>
>>>>> On Wed, Feb 24, 2016 at 11:48 PM, Ralph Goers <
>>>>> ralph.goers@dslextreme.com> wrote:
>>>>>
>>>>>> I haven’t had 5 minutes to spare in 3 days. I will try to look at
>>>>>> this tonight.
>>>>>>
>>>>>> Ralph
>>>>>>
>>>>>> On Feb 24, 2016, at 3:46 PM, Gary Gregory <ga...@gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>> On Tue, Feb 23, 2016 at 8:23 AM, Gary Gregory <garydgregory@gmail.com
>>>>>> > wrote:
>>>>>>
>>>>>>> I see we now have:
>>>>>>>
>>>>>>> org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer2
>>>>>>>
>>>>>>> Should we
>>>>>>> deprecate org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer
>>>>>>> and reimplement everything in terms of Serializer2, even if objects are
>>>>>>> allocated?
>>>>>>>
>>>>>>
>>>>>> Thoughts on this?
>>>>>>
>>>>>> Gary
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> Gary
>>>>>>>
>>>>>>> On Tue, Feb 23, 2016 at 7:59 AM, Remko Popma <re...@gmail.com>
>>>>>>>  wrote:
>>>>>>>
>>>>>>>> Layout now extends Encoder so now it has this method:
>>>>>>>>
>>>>>>>> encode(LogEvent source, ByteBufferDestination destination)
>>>>>>>>
>>>>>>>> PatternLayout implements this method. It delegates the work of
>>>>>>>> converting the StringBuilder to bytes and writing these bytes into the
>>>>>>>> ByteBufferDestination to the TextEncoderHelper class. No objects are
>>>>>>>> created during this conversion.
>>>>>>>>
>>>>>>>> The final piece is (Rolling)RandomAccessFileAppender, whose manager
>>>>>>>> implements ByteBufferDestination. This appender calls the #encode() methos
>>>>>>>> on the layout (other managers still call Layout#toByteArray).
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Wed, Feb 24, 2016 at 12:47 AM, Mikael Ståldal <
>>>>>>>> mikael.staldal@magine.com> wrote:
>>>>>>>>
>>>>>>>>> I cannot really find it.
>>>>>>>>>
>>>>>>>>> On Tue, Feb 23, 2016 at 3:59 PM, Remko Popma <
>>>>>>>>> remko.popma@gmail.com> wrote:
>>>>>>>>>
>>>>>>>>>> Yes, that was implemented in
>>>>>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1274.
>>>>>>>>>>
>>>>>>>>>> Please also see the description and discussion in the epic
>>>>>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1270.
>>>>>>>>>>
>>>>>>>>>> Sent from my iPhone
>>>>>>>>>>
>>>>>>>>>> On 2016/02/23, at 23:56, Mikael Ståldal <
>>>>>>>>>> mikael.staldal@magine.com> wrote:
>>>>>>>>>>
>>>>>>>>>> Do we have any way to convert a StringBuilder to a byte[],
>>>>>>>>>> without any intermediate String?
>>>>>>>>>>
>>>>>>>>>> It seems like org.apache.logging.log4j.core.util.StringEncoder cannot
>>>>>>>>>> do it.
>>>>>>>>>>
>>>>>>>>>> --
>>>>>>>>>> [image: MagineTV]
>>>>>>>>>>
>>>>>>>>>> *Mikael Ståldal*
>>>>>>>>>> Senior software developer
>>>>>>>>>>
>>>>>>>>>> *Magine TV*
>>>>>>>>>> mikael.staldal@magine.com
>>>>>>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>>>>>>>>>> <http://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.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> [image: MagineTV]
>>>>>>>>>
>>>>>>>>> *Mikael Ståldal*
>>>>>>>>> Senior software developer
>>>>>>>>>
>>>>>>>>> *Magine TV*
>>>>>>>>> mikael.staldal@magine.com
>>>>>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>>>>>>>>> <http://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.
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>>>>>> <gg...@apache.org>
>>>>>>> Java Persistence with Hibernate, Second Edition
>>>>>>> <http://www.manning.com/bauer3/>
>>>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>>>>> Blog: http://garygregory.wordpress.com
>>>>>>> Home: http://garygregory.com/
>>>>>>> Tweet! http://twitter.com/GaryGregory
>>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>>>>> <gg...@apache.org>
>>>>>> Java Persistence with Hibernate, Second Edition
>>>>>> <http://www.manning.com/bauer3/>
>>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>>>> Blog: http://garygregory.wordpress.com
>>>>>> Home: http://garygregory.com/
>>>>>> Tweet! http://twitter.com/GaryGregory
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> [image: MagineTV]
>>>>>
>>>>> *Mikael Ståldal*
>>>>> Senior software developer
>>>>>
>>>>> *Magine TV*
>>>>> mikael.staldal@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.
>>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> [image: MagineTV]
>>>
>>> *Mikael Ståldal*
>>> Senior software developer
>>>
>>> *Magine TV*
>>> mikael.staldal@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.
>>>
>>
>>
>>
>> --
>> [image: MagineTV]
>>
>> *Mikael Ståldal*
>> Senior software developer
>>
>> *Magine TV*
>> mikael.staldal@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.
>>
>
>


-- 
E-Mail: garydgregory@gmail.com | ggregory@apache.org
Java Persistence with Hibernate, Second Edition
<http://www.manning.com/bauer3/>
JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
Spring Batch in Action <http://www.manning.com/templier/>
Blog: http://garygregory.wordpress.com
Home: http://garygregory.com/
Tweet! http://twitter.com/GaryGregory

Re: GC lean way to convert StringBuilder to byte[]

Posted by Remko Popma <re...@gmail.com>.
Mikael,
Your changes impact the GelfLayout class mostly, right? Any other class
impacted that you want me to take a look at? If not and all tests pass I'd
say just go ahead and merge into master.

About testing whether it is allocation-free, there is this ticket
LOG4J2-1295 <https://issues.apache.org/jira/browse/LOG4J2-1295> that is
still open.
I'm thinking the Allocation Instrumenter (
https://github.com/google/allocation-instrumenter) would serve our purposes
quite well here.
I just haven't had the bandwidth to look at this in more depth. It probably
involves running a test in a separate VM with the -agent startup option.
Not sure if we can do that with a normal log4j junit test or whether the
test would need to start a separate VM with the proper startup options and
then get that the result of that process via a file or something... It
would actually be really good if you or someone else could make progress on
that Jira, because I currently don't have the bandwidth to look at it yet.


On Sat, Mar 12, 2016 at 1:33 AM, Mikael Ståldal <mi...@magine.com>
wrote:

> Is it OK to merge to master?
>
> Remko, can you help me to verify that it is properly allocation-free (when
> using
> <GelfLayout host="test" compressionType="OFF"/>)?
>
>
> On Tue, Mar 8, 2016 at 5:36 PM, Mikael Ståldal <mi...@magine.com>
> wrote:
>
>> I did it a bit differently, but now there are unit tests for
>> GelfLayout.encode().
>>
>> On Tue, Mar 8, 2016 at 3:51 PM, Remko Popma <re...@gmail.com>
>> wrote:
>>
>>> I added some tests to PatternLayoutTest, please take a look.
>>>
>>> On Tue, Mar 8, 2016 at 11:56 PM, Mikael Ståldal <
>>> mikael.staldal@magine.com> wrote:
>>>
>>>> I have done some work on this for GelfLayout. Please review branch
>>>> gelf-layout-gc-free
>>>>
>>>> Is there any convenient way to unit-test the encode method of a layout?
>>>> Do we do that for PatternLayout?
>>>>
>>>> On Wed, Feb 24, 2016 at 11:48 PM, Ralph Goers <
>>>> ralph.goers@dslextreme.com> wrote:
>>>>
>>>>> I haven’t had 5 minutes to spare in 3 days. I will try to look at this
>>>>> tonight.
>>>>>
>>>>> Ralph
>>>>>
>>>>> On Feb 24, 2016, at 3:46 PM, Gary Gregory <ga...@gmail.com>
>>>>> wrote:
>>>>>
>>>>> On Tue, Feb 23, 2016 at 8:23 AM, Gary Gregory <ga...@gmail.com>
>>>>>  wrote:
>>>>>
>>>>>> I see we now have:
>>>>>>
>>>>>> org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer2
>>>>>>
>>>>>> Should we
>>>>>> deprecate org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer
>>>>>> and reimplement everything in terms of Serializer2, even if objects are
>>>>>> allocated?
>>>>>>
>>>>>
>>>>> Thoughts on this?
>>>>>
>>>>> Gary
>>>>>
>>>>>
>>>>>>
>>>>>> Gary
>>>>>>
>>>>>> On Tue, Feb 23, 2016 at 7:59 AM, Remko Popma <re...@gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Layout now extends Encoder so now it has this method:
>>>>>>>
>>>>>>> encode(LogEvent source, ByteBufferDestination destination)
>>>>>>>
>>>>>>> PatternLayout implements this method. It delegates the work of
>>>>>>> converting the StringBuilder to bytes and writing these bytes into the
>>>>>>> ByteBufferDestination to the TextEncoderHelper class. No objects are
>>>>>>> created during this conversion.
>>>>>>>
>>>>>>> The final piece is (Rolling)RandomAccessFileAppender, whose manager
>>>>>>> implements ByteBufferDestination. This appender calls the #encode() methos
>>>>>>> on the layout (other managers still call Layout#toByteArray).
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Wed, Feb 24, 2016 at 12:47 AM, Mikael Ståldal <
>>>>>>> mikael.staldal@magine.com> wrote:
>>>>>>>
>>>>>>>> I cannot really find it.
>>>>>>>>
>>>>>>>> On Tue, Feb 23, 2016 at 3:59 PM, Remko Popma <remko.popma@gmail.com
>>>>>>>> > wrote:
>>>>>>>>
>>>>>>>>> Yes, that was implemented in
>>>>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1274.
>>>>>>>>>
>>>>>>>>> Please also see the description and discussion in the epic
>>>>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1270.
>>>>>>>>>
>>>>>>>>> Sent from my iPhone
>>>>>>>>>
>>>>>>>>> On 2016/02/23, at 23:56, Mikael Ståldal <mi...@magine.com>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>> Do we have any way to convert a StringBuilder to a byte[], without
>>>>>>>>> any intermediate String?
>>>>>>>>>
>>>>>>>>> It seems like org.apache.logging.log4j.core.util.StringEncoder cannot
>>>>>>>>> do it.
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> [image: MagineTV]
>>>>>>>>>
>>>>>>>>> *Mikael Ståldal*
>>>>>>>>> Senior software developer
>>>>>>>>>
>>>>>>>>> *Magine TV*
>>>>>>>>> mikael.staldal@magine.com
>>>>>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>>>>>>>>> <http://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.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> [image: MagineTV]
>>>>>>>>
>>>>>>>> *Mikael Ståldal*
>>>>>>>> Senior software developer
>>>>>>>>
>>>>>>>> *Magine TV*
>>>>>>>> mikael.staldal@magine.com
>>>>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>>>>>>>> <http://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.
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>>>>> <gg...@apache.org>
>>>>>> Java Persistence with Hibernate, Second Edition
>>>>>> <http://www.manning.com/bauer3/>
>>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>>>> Blog: http://garygregory.wordpress.com
>>>>>> Home: http://garygregory.com/
>>>>>> Tweet! http://twitter.com/GaryGregory
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>>>> <gg...@apache.org>
>>>>> Java Persistence with Hibernate, Second Edition
>>>>> <http://www.manning.com/bauer3/>
>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>>> Blog: http://garygregory.wordpress.com
>>>>> Home: http://garygregory.com/
>>>>> Tweet! http://twitter.com/GaryGregory
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> [image: MagineTV]
>>>>
>>>> *Mikael Ståldal*
>>>> Senior software developer
>>>>
>>>> *Magine TV*
>>>> mikael.staldal@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.
>>>>
>>>
>>>
>>
>>
>> --
>> [image: MagineTV]
>>
>> *Mikael Ståldal*
>> Senior software developer
>>
>> *Magine TV*
>> mikael.staldal@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.
>>
>
>
>
> --
> [image: MagineTV]
>
> *Mikael Ståldal*
> Senior software developer
>
> *Magine TV*
> mikael.staldal@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.
>

Re: GC lean way to convert StringBuilder to byte[]

Posted by Mikael Ståldal <mi...@magine.com>.
Is it OK to merge to master?

Remko, can you help me to verify that it is properly allocation-free (when
using
<GelfLayout host="test" compressionType="OFF"/>)?


On Tue, Mar 8, 2016 at 5:36 PM, Mikael Ståldal <mi...@magine.com>
wrote:

> I did it a bit differently, but now there are unit tests for
> GelfLayout.encode().
>
> On Tue, Mar 8, 2016 at 3:51 PM, Remko Popma <re...@gmail.com> wrote:
>
>> I added some tests to PatternLayoutTest, please take a look.
>>
>> On Tue, Mar 8, 2016 at 11:56 PM, Mikael Ståldal <
>> mikael.staldal@magine.com> wrote:
>>
>>> I have done some work on this for GelfLayout. Please review branch
>>> gelf-layout-gc-free
>>>
>>> Is there any convenient way to unit-test the encode method of a layout?
>>> Do we do that for PatternLayout?
>>>
>>> On Wed, Feb 24, 2016 at 11:48 PM, Ralph Goers <
>>> ralph.goers@dslextreme.com> wrote:
>>>
>>>> I haven’t had 5 minutes to spare in 3 days. I will try to look at this
>>>> tonight.
>>>>
>>>> Ralph
>>>>
>>>> On Feb 24, 2016, at 3:46 PM, Gary Gregory <ga...@gmail.com>
>>>> wrote:
>>>>
>>>> On Tue, Feb 23, 2016 at 8:23 AM, Gary Gregory <ga...@gmail.com>
>>>> wrote:
>>>>
>>>>> I see we now have:
>>>>>
>>>>> org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer2
>>>>>
>>>>> Should we
>>>>> deprecate org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer
>>>>> and reimplement everything in terms of Serializer2, even if objects are
>>>>> allocated?
>>>>>
>>>>
>>>> Thoughts on this?
>>>>
>>>> Gary
>>>>
>>>>
>>>>>
>>>>> Gary
>>>>>
>>>>> On Tue, Feb 23, 2016 at 7:59 AM, Remko Popma <re...@gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Layout now extends Encoder so now it has this method:
>>>>>>
>>>>>> encode(LogEvent source, ByteBufferDestination destination)
>>>>>>
>>>>>> PatternLayout implements this method. It delegates the work of
>>>>>> converting the StringBuilder to bytes and writing these bytes into the
>>>>>> ByteBufferDestination to the TextEncoderHelper class. No objects are
>>>>>> created during this conversion.
>>>>>>
>>>>>> The final piece is (Rolling)RandomAccessFileAppender, whose manager
>>>>>> implements ByteBufferDestination. This appender calls the #encode() methos
>>>>>> on the layout (other managers still call Layout#toByteArray).
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Wed, Feb 24, 2016 at 12:47 AM, Mikael Ståldal <
>>>>>> mikael.staldal@magine.com> wrote:
>>>>>>
>>>>>>> I cannot really find it.
>>>>>>>
>>>>>>> On Tue, Feb 23, 2016 at 3:59 PM, Remko Popma <re...@gmail.com>
>>>>>>>  wrote:
>>>>>>>
>>>>>>>> Yes, that was implemented in
>>>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1274.
>>>>>>>>
>>>>>>>> Please also see the description and discussion in the epic
>>>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1270.
>>>>>>>>
>>>>>>>> Sent from my iPhone
>>>>>>>>
>>>>>>>> On 2016/02/23, at 23:56, Mikael Ståldal <mi...@magine.com>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>> Do we have any way to convert a StringBuilder to a byte[], without
>>>>>>>> any intermediate String?
>>>>>>>>
>>>>>>>> It seems like org.apache.logging.log4j.core.util.StringEncoder cannot
>>>>>>>> do it.
>>>>>>>>
>>>>>>>> --
>>>>>>>> [image: MagineTV]
>>>>>>>>
>>>>>>>> *Mikael Ståldal*
>>>>>>>> Senior software developer
>>>>>>>>
>>>>>>>> *Magine TV*
>>>>>>>> mikael.staldal@magine.com
>>>>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>>>>>>>> <http://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.
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> [image: MagineTV]
>>>>>>>
>>>>>>> *Mikael Ståldal*
>>>>>>> Senior software developer
>>>>>>>
>>>>>>> *Magine TV*
>>>>>>> mikael.staldal@magine.com
>>>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>>>>>>> <http://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.
>>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>>>> <gg...@apache.org>
>>>>> Java Persistence with Hibernate, Second Edition
>>>>> <http://www.manning.com/bauer3/>
>>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>>> Blog: http://garygregory.wordpress.com
>>>>> Home: http://garygregory.com/
>>>>> Tweet! http://twitter.com/GaryGregory
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>>> <gg...@apache.org>
>>>> Java Persistence with Hibernate, Second Edition
>>>> <http://www.manning.com/bauer3/>
>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>> Blog: http://garygregory.wordpress.com
>>>> Home: http://garygregory.com/
>>>> Tweet! http://twitter.com/GaryGregory
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> [image: MagineTV]
>>>
>>> *Mikael Ståldal*
>>> Senior software developer
>>>
>>> *Magine TV*
>>> mikael.staldal@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.
>>>
>>
>>
>
>
> --
> [image: MagineTV]
>
> *Mikael Ståldal*
> Senior software developer
>
> *Magine TV*
> mikael.staldal@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.
>



-- 
[image: MagineTV]

*Mikael Ståldal*
Senior software developer

*Magine TV*
mikael.staldal@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.

Re: GC lean way to convert StringBuilder to byte[]

Posted by Mikael Ståldal <mi...@magine.com>.
I did it a bit differently, but now there are unit tests for
GelfLayout.encode().

On Tue, Mar 8, 2016 at 3:51 PM, Remko Popma <re...@gmail.com> wrote:

> I added some tests to PatternLayoutTest, please take a look.
>
> On Tue, Mar 8, 2016 at 11:56 PM, Mikael Ståldal <mikael.staldal@magine.com
> > wrote:
>
>> I have done some work on this for GelfLayout. Please review branch
>> gelf-layout-gc-free
>>
>> Is there any convenient way to unit-test the encode method of a layout?
>> Do we do that for PatternLayout?
>>
>> On Wed, Feb 24, 2016 at 11:48 PM, Ralph Goers <ralph.goers@dslextreme.com
>> > wrote:
>>
>>> I haven’t had 5 minutes to spare in 3 days. I will try to look at this
>>> tonight.
>>>
>>> Ralph
>>>
>>> On Feb 24, 2016, at 3:46 PM, Gary Gregory <ga...@gmail.com>
>>> wrote:
>>>
>>> On Tue, Feb 23, 2016 at 8:23 AM, Gary Gregory <ga...@gmail.com>
>>> wrote:
>>>
>>>> I see we now have:
>>>>
>>>> org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer2
>>>>
>>>> Should we
>>>> deprecate org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer
>>>> and reimplement everything in terms of Serializer2, even if objects are
>>>> allocated?
>>>>
>>>
>>> Thoughts on this?
>>>
>>> Gary
>>>
>>>
>>>>
>>>> Gary
>>>>
>>>> On Tue, Feb 23, 2016 at 7:59 AM, Remko Popma <re...@gmail.com>
>>>> wrote:
>>>>
>>>>> Layout now extends Encoder so now it has this method:
>>>>>
>>>>> encode(LogEvent source, ByteBufferDestination destination)
>>>>>
>>>>> PatternLayout implements this method. It delegates the work of
>>>>> converting the StringBuilder to bytes and writing these bytes into the
>>>>> ByteBufferDestination to the TextEncoderHelper class. No objects are
>>>>> created during this conversion.
>>>>>
>>>>> The final piece is (Rolling)RandomAccessFileAppender, whose manager
>>>>> implements ByteBufferDestination. This appender calls the #encode() methos
>>>>> on the layout (other managers still call Layout#toByteArray).
>>>>>
>>>>>
>>>>>
>>>>> On Wed, Feb 24, 2016 at 12:47 AM, Mikael Ståldal <
>>>>> mikael.staldal@magine.com> wrote:
>>>>>
>>>>>> I cannot really find it.
>>>>>>
>>>>>> On Tue, Feb 23, 2016 at 3:59 PM, Remko Popma <re...@gmail.com>
>>>>>> wrote:
>>>>>>
>>>>>>> Yes, that was implemented in
>>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1274.
>>>>>>>
>>>>>>> Please also see the description and discussion in the epic
>>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1270.
>>>>>>>
>>>>>>> Sent from my iPhone
>>>>>>>
>>>>>>> On 2016/02/23, at 23:56, Mikael Ståldal <mi...@magine.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>> Do we have any way to convert a StringBuilder to a byte[], without
>>>>>>> any intermediate String?
>>>>>>>
>>>>>>> It seems like org.apache.logging.log4j.core.util.StringEncoder cannot
>>>>>>> do it.
>>>>>>>
>>>>>>> --
>>>>>>> [image: MagineTV]
>>>>>>>
>>>>>>> *Mikael Ståldal*
>>>>>>> Senior software developer
>>>>>>>
>>>>>>> *Magine TV*
>>>>>>> mikael.staldal@magine.com
>>>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>>>>>>> <http://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.
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> [image: MagineTV]
>>>>>>
>>>>>> *Mikael Ståldal*
>>>>>> Senior software developer
>>>>>>
>>>>>> *Magine TV*
>>>>>> mikael.staldal@magine.com
>>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>>>>>> <http://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.
>>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>>> <gg...@apache.org>
>>>> Java Persistence with Hibernate, Second Edition
>>>> <http://www.manning.com/bauer3/>
>>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>>> Spring Batch in Action <http://www.manning.com/templier/>
>>>> Blog: http://garygregory.wordpress.com
>>>> Home: http://garygregory.com/
>>>> Tweet! http://twitter.com/GaryGregory
>>>>
>>>
>>>
>>>
>>> --
>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>> <gg...@apache.org>
>>> Java Persistence with Hibernate, Second Edition
>>> <http://www.manning.com/bauer3/>
>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>> Spring Batch in Action <http://www.manning.com/templier/>
>>> Blog: http://garygregory.wordpress.com
>>> Home: http://garygregory.com/
>>> Tweet! http://twitter.com/GaryGregory
>>>
>>>
>>>
>>
>>
>> --
>> [image: MagineTV]
>>
>> *Mikael Ståldal*
>> Senior software developer
>>
>> *Magine TV*
>> mikael.staldal@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.
>>
>
>


-- 
[image: MagineTV]

*Mikael Ståldal*
Senior software developer

*Magine TV*
mikael.staldal@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.

Re: GC lean way to convert StringBuilder to byte[]

Posted by Remko Popma <re...@gmail.com>.
I added some tests to PatternLayoutTest, please take a look.

On Tue, Mar 8, 2016 at 11:56 PM, Mikael Ståldal <mi...@magine.com>
wrote:

> I have done some work on this for GelfLayout. Please review branch
> gelf-layout-gc-free
>
> Is there any convenient way to unit-test the encode method of a layout? Do
> we do that for PatternLayout?
>
> On Wed, Feb 24, 2016 at 11:48 PM, Ralph Goers <ra...@dslextreme.com>
> wrote:
>
>> I haven’t had 5 minutes to spare in 3 days. I will try to look at this
>> tonight.
>>
>> Ralph
>>
>> On Feb 24, 2016, at 3:46 PM, Gary Gregory <ga...@gmail.com> wrote:
>>
>> On Tue, Feb 23, 2016 at 8:23 AM, Gary Gregory <ga...@gmail.com>
>> wrote:
>>
>>> I see we now have:
>>>
>>> org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer2
>>>
>>> Should we
>>> deprecate org.apache.logging.log4j.core.layout.AbstractStringLayout.Serializer
>>> and reimplement everything in terms of Serializer2, even if objects are
>>> allocated?
>>>
>>
>> Thoughts on this?
>>
>> Gary
>>
>>
>>>
>>> Gary
>>>
>>> On Tue, Feb 23, 2016 at 7:59 AM, Remko Popma <re...@gmail.com>
>>> wrote:
>>>
>>>> Layout now extends Encoder so now it has this method:
>>>>
>>>> encode(LogEvent source, ByteBufferDestination destination)
>>>>
>>>> PatternLayout implements this method. It delegates the work of
>>>> converting the StringBuilder to bytes and writing these bytes into the
>>>> ByteBufferDestination to the TextEncoderHelper class. No objects are
>>>> created during this conversion.
>>>>
>>>> The final piece is (Rolling)RandomAccessFileAppender, whose manager
>>>> implements ByteBufferDestination. This appender calls the #encode() methos
>>>> on the layout (other managers still call Layout#toByteArray).
>>>>
>>>>
>>>>
>>>> On Wed, Feb 24, 2016 at 12:47 AM, Mikael Ståldal <
>>>> mikael.staldal@magine.com> wrote:
>>>>
>>>>> I cannot really find it.
>>>>>
>>>>> On Tue, Feb 23, 2016 at 3:59 PM, Remko Popma <re...@gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Yes, that was implemented in
>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1274.
>>>>>>
>>>>>> Please also see the description and discussion in the epic
>>>>>> https://issues.apache.org/jira/browse/LOG4J2-1270.
>>>>>>
>>>>>> Sent from my iPhone
>>>>>>
>>>>>> On 2016/02/23, at 23:56, Mikael Ståldal <mi...@magine.com>
>>>>>> wrote:
>>>>>>
>>>>>> Do we have any way to convert a StringBuilder to a byte[], without
>>>>>> any intermediate String?
>>>>>>
>>>>>> It seems like org.apache.logging.log4j.core.util.StringEncoder cannot
>>>>>> do it.
>>>>>>
>>>>>> --
>>>>>> [image: MagineTV]
>>>>>>
>>>>>> *Mikael Ståldal*
>>>>>> Senior software developer
>>>>>>
>>>>>> *Magine TV*
>>>>>> mikael.staldal@magine.com
>>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>>>>>> <http://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.
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> [image: MagineTV]
>>>>>
>>>>> *Mikael Ståldal*
>>>>> Senior software developer
>>>>>
>>>>> *Magine TV*
>>>>> mikael.staldal@magine.com
>>>>> Grev Turegatan 3  | 114 46 Stockholm, Sweden  |   www.magine.com
>>>>> <http://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.
>>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>>> <gg...@apache.org>
>>> Java Persistence with Hibernate, Second Edition
>>> <http://www.manning.com/bauer3/>
>>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>>> Spring Batch in Action <http://www.manning.com/templier/>
>>> Blog: http://garygregory.wordpress.com
>>> Home: http://garygregory.com/
>>> Tweet! http://twitter.com/GaryGregory
>>>
>>
>>
>>
>> --
>> E-Mail: garydgregory@gmail.com | ggregory@apache.org
>> <gg...@apache.org>
>> Java Persistence with Hibernate, Second Edition
>> <http://www.manning.com/bauer3/>
>> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/>
>> Spring Batch in Action <http://www.manning.com/templier/>
>> Blog: http://garygregory.wordpress.com
>> Home: http://garygregory.com/
>> Tweet! http://twitter.com/GaryGregory
>>
>>
>>
>
>
> --
> [image: MagineTV]
>
> *Mikael Ståldal*
> Senior software developer
>
> *Magine TV*
> mikael.staldal@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.
>