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]> 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]> wrote:
>
>> Sure, pick one.
>>
>> Gary
>>
>> On Tue, Apr 12, 2016 at 12:01 PM, Matt Sicker <[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]> wrote:
>>>
>>>> I'm so annoyed and apologize for this all lines changed commit. I only
>>>> renamed a variable.
>>>>
>>>> Gary
>>>>
>>>> ---------- Forwarded message ----------
>>>> From: <[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]
>>>>
>>>>
>>>> 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
>>>> Commit:
>>>> 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
>>>> Diff:
>>>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/eb32b2f7
>>>>
>>>> Branch: refs/heads/master
>>>> Commit: eb32b2f77634609a98c9940fac8e28b7e0d20f38
>>>> Parents: c55ace7
>>>> Author: ggregory <[email protected]>
>>>> Authored: Tue Apr 12 11:47:03 2016 -0700
>>>> Committer: ggregory <[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
>>>> ----------------------------------------------------------------------
>>>> 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
>>>> - *
>>>> - * 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
>>>> + *
>>>> + * 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] | [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]>
>>>
>>
>>
>>
>> --
>> 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]>
>



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

Reply via email to