I thought we had standardized on unix line endings.  I don’t recall seeing ^M 
characters in the files. My IDE automatically converts Windows crap to Unix.

Ralph

> On Apr 12, 2016, at 12:12 PM, Gary Gregory <[email protected]> wrote:
> 
> How frugal of you! ;-) I edit on Windows, so that's a two-fer for me ;-)
> 
> Gary
> 
> On Tue, Apr 12, 2016 at 12:04 PM, Matt Sicker <[email protected] 
> <mailto:[email protected]>> wrote:
> I like unix endings because there's only one byte instead of two.
> 
> On 12 April 2016 at 14:02, Gary Gregory <[email protected] 
> <mailto:[email protected]>> wrote:
> Sure, pick one.
> 
> Gary
> 
> On Tue, Apr 12, 2016 at 12:01 PM, Matt Sicker <[email protected] 
> <mailto:[email protected]>> wrote:
> It would be nice to standardize on a single line ending format at some point, 
> but it would be such a huge commit.
> 
> On 12 April 2016 at 13:51, Gary Gregory <[email protected] 
> <mailto:[email protected]>> wrote:
> I'm so annoyed and apologize for this all lines changed commit. I only 
> renamed a variable.
> 
> Gary
> 
> ---------- Forwarded message ----------
> From: <[email protected] <mailto:[email protected]>>
> Date: Tue, Apr 12, 2016 at 11:47 AM
> Subject: logging-log4j2 git commit: I always use "Millis" as the post fix to 
> avoid any confusion.
> To: [email protected] <mailto:[email protected]>
> 
> 
> Repository: logging-log4j2
> Updated Branches:
>   refs/heads/master c55ace781 -> eb32b2f77
> 
> 
> I always use "Millis" as the post fix to avoid any confusion.
> 
> Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo 
> <http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo>
> Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/eb32b2f7 
> <http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/eb32b2f7>
> Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/eb32b2f7 
> <http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/eb32b2f7>
> Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/eb32b2f7 
> <http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/eb32b2f7>
> 
> Branch: refs/heads/master
> Commit: eb32b2f77634609a98c9940fac8e28b7e0d20f38
> Parents: c55ace7
> Author: ggregory <[email protected] <mailto:[email protected]>>
> Authored: Tue Apr 12 11:47:03 2016 -0700
> Committer: ggregory <[email protected] <mailto:[email protected]>>
> Committed: Tue Apr 12 11:47:03 2016 -0700
> 
> ----------------------------------------------------------------------
>  .../logging/log4j/core/async/DisruptorUtil.java | 296 +++++++++----------
>  1 file changed, 148 insertions(+), 148 deletions(-)
> ----------------------------------------------------------------------
> 
> 
> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/eb32b2f7/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java
>  
> <http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/eb32b2f7/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java>
> ----------------------------------------------------------------------
> diff --git 
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java
>  
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java
> index 4faa174..3ce30f0 100644
> --- 
> a/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java
> +++ 
> b/log4j-core/src/main/java/org/apache/logging/log4j/core/async/DisruptorUtil.java
> @@ -1,148 +1,148 @@
> -/*
> - * Licensed to the Apache Software Foundation (ASF) under one or more
> - * contributor license agreements. See the NOTICE file distributed with
> - * this work for additional information regarding copyright ownership.
> - * The ASF licenses this file to You under the Apache license, Version 2.0
> - * (the "License"); you may not use this file except in compliance with
> - * the License. You may obtain a copy of the License at
> - *
> - *      http://www.apache.org/licenses/LICENSE-2.0 
> <http://www.apache.org/licenses/LICENSE-2.0>
> - *
> - * Unless required by applicable law or agreed to in writing, software
> - * distributed under the License is distributed on an "AS IS" BASIS,
> - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> - * See the license for the specific language governing permissions and
> - * limitations under the license.
> - */
> -
> -package org.apache.logging.log4j.core.async;
> -
> -import java.util.concurrent.Callable;
> -import java.util.concurrent.ExecutorService;
> -import java.util.concurrent.Future;
> -import java.util.concurrent.TimeUnit;
> -
> -import com.lmax.disruptor.*;
> -import org.apache.logging.log4j.Logger;
> -import org.apache.logging.log4j.core.util.Constants;
> -import org.apache.logging.log4j.core.util.Integers;
> -import org.apache.logging.log4j.status.StatusLogger;
> -import org.apache.logging.log4j.util.LoaderUtil;
> -import org.apache.logging.log4j.util.PropertiesUtil;
> -
> -/**
> - * Utility methods for getting Disruptor related configuration.
> - */
> -final class DisruptorUtil {
> -    private static final Logger LOGGER = StatusLogger.getLogger();
> -    private static final int RINGBUFFER_MIN_SIZE = 128;
> -    private static final int RINGBUFFER_DEFAULT_SIZE = 256 * 1024;
> -    private static final int RINGBUFFER_NO_GC_DEFAULT_SIZE = 4 * 1024;
> -
> -    private DisruptorUtil() {
> -    }
> -
> -    static long getTimeout(final String propertyName, final long 
> defaultTimeout) {
> -        return PropertiesUtil.getProperties().getLongProperty(propertyName, 
> defaultTimeout);
> -    }
> -
> -    static WaitStrategy createWaitStrategy(final String propertyName) {
> -        final String key = propertyName.startsWith("AsyncLogger.")
> -                ? "AsyncLogger.Timeout"
> -                : "AsyncLoggerConfig.Timeout";
> -        final long timeout = DisruptorUtil.getTimeout(key, 10L);
> -        return createWaitStrategy(propertyName, timeout);
> -    }
> -
> -    static WaitStrategy createWaitStrategy(final String propertyName, final 
> long timeoutMs) {
> -        final String strategy = 
> PropertiesUtil.getProperties().getStringProperty(propertyName);
> -        if (strategy != null) {
> -            LOGGER.trace("property {}={}", propertyName, strategy);
> -            if ("Sleep".equalsIgnoreCase(strategy)) {
> -                return new SleepingWaitStrategy();
> -            } else if ("Yield".equalsIgnoreCase(strategy)) {
> -                return new YieldingWaitStrategy();
> -            } else if ("Block".equalsIgnoreCase(strategy)) {
> -                return new BlockingWaitStrategy();
> -            } else if ("BusySpin".equalsIgnoreCase(strategy)) {
> -                return new BusySpinWaitStrategy();
> -            } else if ("Timeout".equalsIgnoreCase(strategy)) {
> -                return new TimeoutBlockingWaitStrategy(timeoutMs, 
> TimeUnit.MILLISECONDS);
> -            }
> -        }
> -        return new TimeoutBlockingWaitStrategy(timeoutMs, 
> TimeUnit.MILLISECONDS);
> -    }
> -
> -    static int calculateRingBufferSize(final String propertyName) {
> -        int ringBufferSize = Constants.ENABLE_THREADLOCALS ? 
> RINGBUFFER_NO_GC_DEFAULT_SIZE : RINGBUFFER_DEFAULT_SIZE;
> -        final String userPreferredRBSize = 
> PropertiesUtil.getProperties().getStringProperty(propertyName,
> -                String.valueOf(ringBufferSize));
> -        try {
> -            int size = Integer.parseInt(userPreferredRBSize);
> -            if (size < RINGBUFFER_MIN_SIZE) {
> -                size = RINGBUFFER_MIN_SIZE;
> -                LOGGER.warn("Invalid RingBufferSize {}, using minimum size 
> {}.", userPreferredRBSize,
> -                        RINGBUFFER_MIN_SIZE);
> -            }
> -            ringBufferSize = size;
> -        } catch (final Exception ex) {
> -            LOGGER.warn("Invalid RingBufferSize {}, using default size {}.", 
> userPreferredRBSize, ringBufferSize);
> -        }
> -        return Integers.ceilingNextPowerOfTwo(ringBufferSize);
> -    }
> -
> -    static ExceptionHandler<RingBufferLogEvent> 
> getAsyncLoggerExceptionHandler() {
> -        final String cls = 
> PropertiesUtil.getProperties().getStringProperty("AsyncLogger.ExceptionHandler");
> -        if (cls == null) {
> -            return new DefaultAsyncLoggerExceptionHandler();
> -        }
> -        try {
> -            @SuppressWarnings("unchecked")
> -            final Class<? extends ExceptionHandler<RingBufferLogEvent>> 
> klass =
> -                (Class<? extends ExceptionHandler<RingBufferLogEvent>>) 
> LoaderUtil.loadClass(cls);
> -            return klass.newInstance();
> -        } catch (final Exception ignored) {
> -            LOGGER.debug("Invalid AsyncLogger.ExceptionHandler value: error 
> creating {}: ", cls, ignored);
> -            return new DefaultAsyncLoggerExceptionHandler();
> -        }
> -    }
> -
> -    static ExceptionHandler<AsyncLoggerConfigDisruptor.Log4jEventWrapper> 
> getAsyncLoggerConfigExceptionHandler() {
> -        final String cls = 
> PropertiesUtil.getProperties().getStringProperty("AsyncLoggerConfig.ExceptionHandler");
> -        if (cls == null) {
> -            return new DefaultAsyncLoggerConfigExceptionHandler();
> -        }
> -        try {
> -            @SuppressWarnings("unchecked")
> -            final Class<? extends 
> ExceptionHandler<AsyncLoggerConfigDisruptor.Log4jEventWrapper>> klass =
> -                    (Class<? extends 
> ExceptionHandler<AsyncLoggerConfigDisruptor.Log4jEventWrapper>>) 
> LoaderUtil.loadClass(cls);
> -            return klass.newInstance();
> -        } catch (final Exception ignored) {
> -            LOGGER.debug("Invalid AsyncLoggerConfig.ExceptionHandler value: 
> error creating {}: ", cls, ignored);
> -            return new DefaultAsyncLoggerConfigExceptionHandler();
> -        }
> -    }
> -
> -    /**
> -     * Returns the thread ID of the background appender thread. This allows 
> us to detect Logger.log() calls initiated
> -     * from the appender thread, which may cause deadlock when the 
> RingBuffer is full. (LOG4J2-471)
> -     *
> -     * @param executor runs the appender thread
> -     * @return the thread ID of the background appender thread
> -     */
> -    public static long getExecutorThreadId(final ExecutorService executor) {
> -        Future<Long> result = executor.submit(new Callable<Long>() {
> -            @Override
> -            public Long call() {
> -                return Thread.currentThread().getId();
> -            }
> -        });
> -        try {
> -            return result.get();
> -        } catch (final Exception ex) {
> -            final String msg = "Could not obtain executor thread Id. "
> -                    + "Giving up to avoid the risk of application deadlock.";
> -            throw new IllegalStateException(msg, ex);
> -        }
> -    }
> -}
> +/*
> + * Licensed to the Apache Software Foundation (ASF) under one or more
> + * contributor license agreements. See the NOTICE file distributed with
> + * this work for additional information regarding copyright ownership.
> + * The ASF licenses this file to You under the Apache license, Version 2.0
> + * (the "License"); you may not use this file except in compliance with
> + * the License. You may obtain a copy of the License at
> + *
> + *      http://www.apache.org/licenses/LICENSE-2.0 
> <http://www.apache.org/licenses/LICENSE-2.0>
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> + * See the license for the specific language governing permissions and
> + * limitations under the license.
> + */
> +
> +package org.apache.logging.log4j.core.async;
> +
> +import java.util.concurrent.Callable;
> +import java.util.concurrent.ExecutorService;
> +import java.util.concurrent.Future;
> +import java.util.concurrent.TimeUnit;
> +
> +import com.lmax.disruptor.*;
> +import org.apache.logging.log4j.Logger;
> +import org.apache.logging.log4j.core.util.Constants;
> +import org.apache.logging.log4j.core.util.Integers;
> +import org.apache.logging.log4j.status.StatusLogger;
> +import org.apache.logging.log4j.util.LoaderUtil;
> +import org.apache.logging.log4j.util.PropertiesUtil;
> +
> +/**
> + * Utility methods for getting Disruptor related configuration.
> + */
> +final class DisruptorUtil {
> +    private static final Logger LOGGER = StatusLogger.getLogger();
> +    private static final int RINGBUFFER_MIN_SIZE = 128;
> +    private static final int RINGBUFFER_DEFAULT_SIZE = 256 * 1024;
> +    private static final int RINGBUFFER_NO_GC_DEFAULT_SIZE = 4 * 1024;
> +
> +    private DisruptorUtil() {
> +    }
> +
> +    static long getTimeout(final String propertyName, final long 
> defaultTimeout) {
> +        return PropertiesUtil.getProperties().getLongProperty(propertyName, 
> defaultTimeout);
> +    }
> +
> +    static WaitStrategy createWaitStrategy(final String propertyName) {
> +        final String key = propertyName.startsWith("AsyncLogger.")
> +                ? "AsyncLogger.Timeout"
> +                : "AsyncLoggerConfig.Timeout";
> +        final long timeout = DisruptorUtil.getTimeout(key, 10L);
> +        return createWaitStrategy(propertyName, timeout);
> +    }
> +
> +    static WaitStrategy createWaitStrategy(final String propertyName, final 
> long timeoutMillis) {
> +        final String strategy = 
> PropertiesUtil.getProperties().getStringProperty(propertyName);
> +        if (strategy != null) {
> +            LOGGER.trace("property {}={}", propertyName, strategy);
> +            if ("Sleep".equalsIgnoreCase(strategy)) {
> +                return new SleepingWaitStrategy();
> +            } else if ("Yield".equalsIgnoreCase(strategy)) {
> +                return new YieldingWaitStrategy();
> +            } else if ("Block".equalsIgnoreCase(strategy)) {
> +                return new BlockingWaitStrategy();
> +            } else if ("BusySpin".equalsIgnoreCase(strategy)) {
> +                return new BusySpinWaitStrategy();
> +            } else if ("Timeout".equalsIgnoreCase(strategy)) {
> +                return new TimeoutBlockingWaitStrategy(timeoutMillis, 
> TimeUnit.MILLISECONDS);
> +            }
> +        }
> +        return new TimeoutBlockingWaitStrategy(timeoutMillis, 
> TimeUnit.MILLISECONDS);
> +    }
> +
> +    static int calculateRingBufferSize(final String propertyName) {
> +        int ringBufferSize = Constants.ENABLE_THREADLOCALS ? 
> RINGBUFFER_NO_GC_DEFAULT_SIZE : RINGBUFFER_DEFAULT_SIZE;
> +        final String userPreferredRBSize = 
> PropertiesUtil.getProperties().getStringProperty(propertyName,
> +                String.valueOf(ringBufferSize));
> +        try {
> +            int size = Integer.parseInt(userPreferredRBSize);
> +            if (size < RINGBUFFER_MIN_SIZE) {
> +                size = RINGBUFFER_MIN_SIZE;
> +                LOGGER.warn("Invalid RingBufferSize {}, using minimum size 
> {}.", userPreferredRBSize,
> +                        RINGBUFFER_MIN_SIZE);
> +            }
> +            ringBufferSize = size;
> +        } catch (final Exception ex) {
> +            LOGGER.warn("Invalid RingBufferSize {}, using default size {}.", 
> userPreferredRBSize, ringBufferSize);
> +        }
> +        return Integers.ceilingNextPowerOfTwo(ringBufferSize);
> +    }
> +
> +    static ExceptionHandler<RingBufferLogEvent> 
> getAsyncLoggerExceptionHandler() {
> +        final String cls = 
> PropertiesUtil.getProperties().getStringProperty("AsyncLogger.ExceptionHandler");
> +        if (cls == null) {
> +            return new DefaultAsyncLoggerExceptionHandler();
> +        }
> +        try {
> +            @SuppressWarnings("unchecked")
> +            final Class<? extends ExceptionHandler<RingBufferLogEvent>> 
> klass =
> +                (Class<? extends ExceptionHandler<RingBufferLogEvent>>) 
> LoaderUtil.loadClass(cls);
> +            return klass.newInstance();
> +        } catch (final Exception ignored) {
> +            LOGGER.debug("Invalid AsyncLogger.ExceptionHandler value: error 
> creating {}: ", cls, ignored);
> +            return new DefaultAsyncLoggerExceptionHandler();
> +        }
> +    }
> +
> +    static ExceptionHandler<AsyncLoggerConfigDisruptor.Log4jEventWrapper> 
> getAsyncLoggerConfigExceptionHandler() {
> +        final String cls = 
> PropertiesUtil.getProperties().getStringProperty("AsyncLoggerConfig.ExceptionHandler");
> +        if (cls == null) {
> +            return new DefaultAsyncLoggerConfigExceptionHandler();
> +        }
> +        try {
> +            @SuppressWarnings("unchecked")
> +            final Class<? extends 
> ExceptionHandler<AsyncLoggerConfigDisruptor.Log4jEventWrapper>> klass =
> +                    (Class<? extends 
> ExceptionHandler<AsyncLoggerConfigDisruptor.Log4jEventWrapper>>) 
> LoaderUtil.loadClass(cls);
> +            return klass.newInstance();
> +        } catch (final Exception ignored) {
> +            LOGGER.debug("Invalid AsyncLoggerConfig.ExceptionHandler value: 
> error creating {}: ", cls, ignored);
> +            return new DefaultAsyncLoggerConfigExceptionHandler();
> +        }
> +    }
> +
> +    /**
> +     * Returns the thread ID of the background appender thread. This allows 
> us to detect Logger.log() calls initiated
> +     * from the appender thread, which may cause deadlock when the 
> RingBuffer is full. (LOG4J2-471)
> +     *
> +     * @param executor runs the appender thread
> +     * @return the thread ID of the background appender thread
> +     */
> +    public static long getExecutorThreadId(final ExecutorService executor) {
> +        Future<Long> result = executor.submit(new Callable<Long>() {
> +            @Override
> +            public Long call() {
> +                return Thread.currentThread().getId();
> +            }
> +        });
> +        try {
> +            return result.get();
> +        } catch (final Exception ex) {
> +            final String msg = "Could not obtain executor thread Id. "
> +                    + "Giving up to avoid the risk of application deadlock.";
> +            throw new IllegalStateException(msg, ex);
> +        }
> +    }
> +}
> 
> 
> 
> 
> -- 
> E-Mail: [email protected] <mailto:[email protected]> | 
> [email protected]  <mailto:[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 <http://garygregory.wordpress.com/> 
> Home: http://garygregory.com/ <http://garygregory.com/>
> Tweet! http://twitter.com/GaryGregory <http://twitter.com/GaryGregory>
> 
> 
> -- 
> Matt Sicker <[email protected] <mailto:[email protected]>>
> 
> 
> 
> -- 
> E-Mail: [email protected] <mailto:[email protected]> | 
> [email protected]  <mailto:[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 <http://garygregory.wordpress.com/> 
> Home: http://garygregory.com/ <http://garygregory.com/>
> Tweet! http://twitter.com/GaryGregory <http://twitter.com/GaryGregory>
> 
> 
> -- 
> Matt Sicker <[email protected] <mailto:[email protected]>>
> 
> 
> 
> -- 
> E-Mail: [email protected] <mailto:[email protected]> | 
> [email protected]  <mailto:[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 <http://garygregory.wordpress.com/> 
> Home: http://garygregory.com/ <http://garygregory.com/>
> Tweet! http://twitter.com/GaryGregory <http://twitter.com/GaryGregory>

Reply via email to