[
https://issues.apache.org/jira/browse/LOG4J2-1297?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15245018#comment-15245018
]
Remko Popma commented on LOG4J2-1297:
-------------------------------------
TODO allocate many temporary objects -> allocate temporary objects
TODO multi-threaded applications that use synchronous logging may see worse
performance: the lock that was previously only around the IO operation is
widened to include the text formatting and conversion to bytes. ->
_synchronous_ logging performance may be worse for multi-threaded applications
in this mode due to synchronization on the shared buffer. If your application
is multi-threaded and logging performance is important, consider using Async
Loggers.
TODO Caution: Only dates in the predefined formats are garbage-free -> Caution:
Only the predefined date formats are garbage-free
TODO "(Note that Log4j may call toString() on message and parameter objects
when garbage-free logging is disabled because system property
log4j2.enable.threadlocals is set to "false".)" -> Log4j may call toString() on
message and parameter objects when garbage-free logging is disabled (when
system property log4j2.enable.threadlocals is set to "false".)
TODO "made an effort to make logging code garbage-free" -> "made an effort to
make logging garbage-free"
> Document "gc-free" configuration and performance
> ------------------------------------------------
>
> Key: LOG4J2-1297
> URL: https://issues.apache.org/jira/browse/LOG4J2-1297
> Project: Log4j 2
> Issue Type: New Feature
> Components: Documentation
> Affects Versions: 2.5
> Reporter: Remko Popma
> Assignee: Remko Popma
> Fix For: 2.6
>
> Attachments: log4j-2.5-FlightRecording.png,
> log4j-2.6-FlightRecording.png
>
>
> Update the site with a description of which configurations are GC-free (i.e.,
> that don't create temporary objects in steady running state).
> Currently that means
> * Loggers are all asynchronous (Log4jContextSelector is set to
> org.apache.logging.log4j.core.async.AsyncLoggerContextSelector).
> * The configuration does not contain a <Properties> section.
> * The "steady-state" appenders are either RandomAccessFile or
> RollingRandomAccessFile Appenders (logging to any other appender will cause
> temporary objects to be created - including ConsoleAppender).
> * The Layout is a PatternLayout that uses one of the pre-defined date
> formats, does not have any regular expression replacements, and does not have
> lookups (TODO: may need to restrict this further).
> * The thread name is cached (this is the
> [default|https://issues.apache.org/jira/browse/LOG4J2-467]). Running with
> -DAsyncLogger.ThreadNameStrategy=UNCACHED will create garbage.
> * In user code, when logging a parameterized message, the number of
> parameters is no more than ... (TBD pending discussion in LOG4J2-1278).
> * In user code, when logging a parameterized message, parameters of primitive
> type are boxed in a reused StringBuilder (Log4j provides a utility to make
> this relatively painless).
> Even with the above restrictions, Log4j may occasionally create garbage:
> * Initially StringBuilders are presized to 128 characters. They may grow for
> larger messages (contributing to garbage in Old Gen). If the StringBuilder
> grows beyond 512 characters it is trimmed back to 512 characters to prevent
> memory leaks from excessively long messages. (TODO: the resizing algorithm is
> {{size = value.length * 2 + 2}}, so a better cutoff value is 518.)
> * Messages containing {{"$\{"}} will be converted to a String and
> StrSubstitutor will be used to replace occurences of variables with their
> matching values. Multiple temporary objects are created during this process.
> Furthermore, we need to explain that some of this functionality depends on
> ThreadLocals and so is disabled by default in web applications to prevent
> memory leaks. The page should also explain how to manually switch off the use
> of ThreadLocals.
> Finally, the page should show a performance test comparison similar to the
> [performance
> section|http://logging.apache.org/log4j/2.x/manual/async.html#Performance] on
> the Async Loggers page. I'm thinking a comparison between Logback, Log4j-1,
> Log4j-2.0, Log4j-2.6 "classic" and Log4j-2.6 "gc-free" would be ideal.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]