Thanks for the clarification. I thought I knew that, but apparently I didn't. Still learning... Next step: deleting branch LOG4J2-431. (It's not easy from EGit, I got that far...)
Sent from my iPhone > On 2014/09/19, at 6:49, Matt Sicker <[email protected]> wrote: > > You should on rebase to the branch point that you may have that hasn't been > pushed anywhere. So for instance, if you have your own local branch and never > push it, it works just fine to keep doing rebase. However, if you push out > your branch like I've done a few times so far, then you need to merge instead > of rebase. > >> On 17 September 2014 18:49, Remko Popma <[email protected]> wrote: >> I wonder what I did wrong... I did: >> * change appenders.xml and changes.xml >> * commit locally (not commit and push) >> * rebase with origin/master >> ...and got a lot of conflicts. >> >> The changes.xml conflict is expected, but it's marking all files I added >> (MemoryMappedFileAppender.java, etc) as conflicting additions now... >> >> Should I have pushed my local changes to the remote 431 branch before >> rebasing with origin/master? >> >> >>> On Thursday, September 18, 2014, Remko Popma <[email protected]> wrote: >>> I rephrased it but when I tried to rebase the branch I got tons of >>> conflicts and got stuck. I'll try again tonight. >>> >>> Sent from my iPhone >>> >>>> On 2014/09/18, at 1:55, Matt Sicker <[email protected]> wrote: >>>> >>>> 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 >>>>>>> JUnit in Action, Second Edition >>>>>>> Spring Batch in Action >>>>>>> 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 >>>>> JUnit in Action, Second Edition >>>>> Spring Batch in Action >>>>> Blog: http://garygregory.wordpress.com >>>>> Home: http://garygregory.com/ >>>>> Tweet! http://twitter.com/GaryGregory >>>> >>>> >>>> >>>> -- >>>> Matt Sicker <[email protected]> > > > > -- > Matt Sicker <[email protected]>
