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