I think it would definitely be a good idea to mention "since 2.1" or a similar message. That's rather important since we don't maintain past versions of the website manual.
On 17 September 2014 11:13, Gary Gregory <[email protected]> wrote: > I would say nothing, otherwise, we should go around all of the docs and > put "beta" on all the new stuff. I think the docs maybe could say "since > 2.1" or "new" for the new stuff. But it is says "new" or "beta" you have to > go edit that again when we release. I think it is best to have a "what's > new section" that tracks what was added in each version. > > Gary > > On Wed, Sep 17, 2014 at 12:02 PM, Remko Popma <[email protected]> > wrote: > >> Shall I replace "Experimental" with "Beta" in the docs for this component >> then until 2.1 final? I'm fine with that. >> >> On Thu, Sep 18, 2014 at 12:48 AM, Gary Gregory <[email protected]> >> wrote: >> >>> I do not think this should be marker "experimental". >>> >>> If it is brought into trunk for 2.1 and we have a beta, we can say, this >>> and that are new, it's a beta. >>> >>> Gary >>> >>> ---------- Forwarded message ---------- >>> From: <[email protected]> >>> Date: Wed, Sep 17, 2014 at 11:45 AM >>> Subject: [1/3] git commit: LOG4J2-431 MemoryMappedFileAppender manual >>> page >>> To: [email protected] >>> >>> >>> Repository: logging-log4j2 >>> Updated Branches: >>> refs/heads/LOG4J2-431 64369f3d7 -> 63aed83d6 >>> >>> >>> LOG4J2-431 MemoryMappedFileAppender manual page >>> >>> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo >>> Commit: >>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/80dafe9e >>> Tree: >>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/80dafe9e >>> Diff: >>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/80dafe9e >>> >>> Branch: refs/heads/LOG4J2-431 >>> Commit: 80dafe9e85c28f89d5b4d411d8b28c33642f411f >>> Parents: 64369f3 >>> Author: rpopma <[email protected]> >>> Authored: Thu Sep 18 00:42:50 2014 +0900 >>> Committer: rpopma <[email protected]> >>> Committed: Thu Sep 18 00:42:50 2014 +0900 >>> >>> ---------------------------------------------------------------------- >>> src/site/xdoc/manual/appenders.xml | 131 >>> ++++++++++++++++++++++++++++++++ >>> 1 file changed, 131 insertions(+) >>> ---------------------------------------------------------------------- >>> >>> >>> >>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/80dafe9e/src/site/xdoc/manual/appenders.xml >>> ---------------------------------------------------------------------- >>> diff --git a/src/site/xdoc/manual/appenders.xml >>> b/src/site/xdoc/manual/appenders.xml >>> index 032983b..7d47f78 100644 >>> --- a/src/site/xdoc/manual/appenders.xml >>> +++ b/src/site/xdoc/manual/appenders.xml >>> @@ -1320,6 +1320,137 @@ public class JpaLogEntity extends >>> AbstractLogEventWrapperEntity { >>> ... >>> }]]></pre> >>> </subsection> >>> + <a name="MemoryMappedFileAppender" /> >>> + <subsection name="MemoryMappedFileAppender"> >>> + <p><i>Experimental. This has been tested on several platforms, >>> but this is >>> + a new component (since 2.1) and does not yet have much track >>> record.</i></p> >>> + <p> >>> + The MemoryMappedFileAppender maps a part of the specified >>> file into memory >>> + and writes log events to this memory, relying on the >>> operating system's >>> + virtual memory manager to synchronize the changes to the >>> storage device. >>> + The main benefit of doing this is I/O performance. Instead of >>> making system >>> + calls to write to disk, this appender can simply change the >>> program's local memory, >>> + which is orders of magnitude faster. Also, in most operating >>> systems the memory >>> + region mapped actually is the kernel's <a href=" >>> http://en.wikipedia.org/wiki/Page_cache">page >>> + cache</a> (file cache), meaning that no copies need to be >>> created in user space. >>> + (TODO: performance tests that compare performance of this >>> appender to >>> + RandomAccessFileAppender and FileAppender.) >>> + </p> >>> + <p> >>> + There is some overhead with mapping a file region into memory, >>> + especially very large regions (half a gigabyte or more). >>> + The default region size is 32 MB, which should strike a >>> reasonable balance >>> + between the frequency and the duration of remap operations. >>> + (TODO: performance test remapping various sizes.) >>> + </p> >>> + <p> >>> + Similar to the FileAppender and the RandomAccessFileAppender, >>> + MemoryMappedFileAppender uses a MemoryMappedFileManager to >>> actually perform the >>> + file I/O. While MemoryMappedFileAppender from different >>> Configurations >>> + cannot be shared, the MemoryMappedFileManagers can be if the >>> Manager is >>> + accessible. For example, two web applications in a servlet >>> container can have >>> + their own configuration and safely write to the same file if >>> Log4j >>> + is in a ClassLoader that is common to both of them. >>> + </p> >>> + <table> >>> + <caption align="top">MemoryMappedFileAppender >>> Parameters</caption> >>> + <tr> >>> + <th>Parameter Name</th> >>> + <th>Type</th> >>> + <th>Description</th> >>> + </tr> >>> + <tr> >>> + <td>append</td> >>> + <td>boolean</td> >>> + <td>When true - the default, records will be appended to >>> the end >>> + of the file. When set to false, the file will be cleared >>> before >>> + new records are written. >>> + </td> >>> + </tr> >>> + <tr> >>> + <td>fileName</td> >>> + <td>String</td> >>> + <td>The name of the file to write to. If the file, or any >>> of its >>> + parent directories, do not exist, they will be created. >>> + </td> >>> + </tr> >>> + <tr> >>> + <td>filters</td> >>> + <td>Filter</td> >>> + <td>A Filter to determine if the event should be handled by >>> this >>> + Appender. More than one Filter may be used by using a >>> CompositeFilter. >>> + </td> >>> + </tr> >>> + <tr> >>> + <td>immediateFlush</td> >>> + <td>boolean</td> >>> + <td> >>> + <p>When set to true, each write will be followed by a >>> + call to <a href=" >>> http://docs.oracle.com/javase/7/docs/api/java/nio/MappedByteBuffer.html#force() >>> ">MappedByteBuffer.force()</a>. >>> + This will guarantee the data is written to the storage >>> device. >>> + </p> >>> + <p>The default for this parameter is <code>false</code>. >>> + This means that the data is written to the storage >>> device even >>> + if the Java process crashes, but there may be data loss >>> if the >>> + operating system crashes. Note that manually forcing a >>> sync on every >>> + log event loses most of the performance benefits of >>> using a memory mapped file.</p> >>> + <p>Flushing after every write is only useful when using >>> this >>> + appender with synchronous loggers. Asynchronous loggers >>> and >>> + appenders will automatically flush at the end of a batch >>> of events, >>> + even if immediateFlush is set to false. This also >>> guarantees >>> + the data is written to disk but is more efficient. >>> + </p> >>> + </td> >>> + </tr> >>> + <tr> >>> + <td>regionLength</td> >>> + <td>int</td> >>> + <td>The length of the mapped region, defaults to 32 MB >>> + (32 * 1024 * 1024 bytes). This parameter must be a value >>> + between 256 and 1,073,741,824 (1 GB or 2^30); >>> + values outside this range will be adjusted to the closest >>> valid >>> + value. >>> + Log4j will round the specified value up to the nearest >>> power of two.</td> >>> + </tr> >>> + <tr> >>> + <td>layout</td> >>> + <td>Layout</td> >>> + <td>The Layout to use to format the LogEvent</td> >>> + </tr> >>> + <tr> >>> + <td>name</td> >>> + <td>String</td> >>> + <td>The name of the Appender.</td> >>> + </tr> >>> + <tr> >>> + <td>ignoreExceptions</td> >>> + <td>boolean</td> >>> + <td>The default is <code>true</code>, causing exceptions >>> encountered while appending events to be >>> + internally logged and then ignored. When set to >>> <code>false</code> exceptions will be propagated to the >>> + caller, instead. You must set this to <code>false</code> >>> when wrapping this Appender in a >>> + <a href="#FailoverAppender">FailoverAppender</a>.</td> >>> + </tr> >>> + </table> >>> + <p> >>> + Here is a sample MemoryMappedFile configuration: >>> + </p> >>> + >>> + <pre class="prettyprint linenums"><![CDATA[<?xml >>> version="1.0" encoding="UTF-8"?> >>> +<Configuration status="warn" name="MyApp" packages=""> >>> + <Appenders> >>> + <MemoryMappedFile name="MyFile" fileName="logs/app.log"> >>> + <PatternLayout> >>> + <Pattern>%d %p %c{1.} [%t] %m%n</Pattern> >>> + </PatternLayout> >>> + </MemoryMappedFile> >>> + </Appenders> >>> + <Loggers> >>> + <Root level="error"> >>> + <AppenderRef ref="MyFile"/> >>> + </Root> >>> + </Loggers> >>> +</Configuration>]]></pre> >>> + </subsection> >>> <a name="NoSQLAppender"/> >>> <subsection name="NoSQLAppender"> >>> <p>The NoSQLAppender writes log events to a NoSQL database >>> using an internal lightweight provider interface. >>> >>> >>> >>> >>> -- >>> E-Mail: [email protected] | [email protected] >>> 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: [email protected] | [email protected] > 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 <[email protected]>
