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]>

Reply via email to