logging-log4j-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ralph Goers <ralph.go...@dslextreme.com>
Subject Re: logging-log4j2 git commit: Add PerformanceSensitive annotation.
Date Mon, 22 Feb 2016 05:35:26 GMT
I like this. A lot of the logging code is critical path/performance sensitive. Allowing a “reason”
or reasons helps a lot.

Ralph

> On Feb 21, 2016, at 9:25 PM, Matt Sicker <boards@gmail.com> wrote:
> 
> Syntax-wise, you can use either @PerformanceSensitive("foo") or @PerformanceSensitive({"foo",
"bar"})
> 
> On 21 February 2016 at 22:23, Matt Sicker <boards@gmail.com <mailto:boards@gmail.com>>
wrote:
> I can change it for the former (you need to use a string array, though), the latter is
only possible in Java 1.8+.
> 
> On 21 February 2016 at 22:22, Remko Popma <remko.popma@gmail.com <mailto:remko.popma@gmail.com>>
wrote:
> Can an annotation have multiple values?
> @PerformanceSensitive("AllocationFree", "CriticalPath")
> 
> Or can a method be annotated with the same annotation appear multiple times?
> Both @PerformanceSensitive("AllocationFree") and @PerformanceSensitive("CriticalPath")?
> 
> 
> On Monday, 22 February 2016, Remko Popma <remko.popma@gmail.com <mailto:remko.popma@gmail.com>>
wrote:
> I like @PerformanceSensitive very much!
> 
> I can then see specific variations like
> @PerformanceSensitive("InlineSize")
> @PerformanceSensitive("AllocationFree")
> 
> 
> 
> Sent from my iPhone
> 
> On 2016/02/22, at 12:48, Gary Gregory <garydgregory@gmail.com <>> wrote:
> 
>> Well, a method can be on the critical path and not have been hand-optimized either
because it is already as fast as can be or we have not gotten around to it (which make you
want to have a @NeedsOptimization, rabbit hole warning!). So we could have both. Some methods
would be @CriticalPath, and some both @CriticalPath and @HandOptimized. But you would not
have just @HandOptimized or if you did it would imply @CriticalPath. which is a bit too clever
....
>> 
>> Gary
>> 
>> On Sun, Feb 21, 2016 at 7:43 PM, Matt Sicker <boards@gmail.com <>> wrote:
>> Those both sound better, but I can't decide on which.
>> 
>> On 21 February 2016 at 21:32, Gary Gregory <garydgregory@gmail.com <>>
wrote:
>> I wonder if @CriticalPath or @HandOptimized would convey better what we are trying
to express?
>> 
>> Gary
>> 
>> 
>> ---------- Forwarded message ----------
>> From: <mattsicker@apache.org <>>
>> Date: Sun, Feb 21, 2016 at 7:02 PM
>> Subject: logging-log4j2 git commit: Add PerformanceSensitive annotation.
>> To: commits@logging.apache.org <>
>> 
>> 
>> Repository: logging-log4j2
>> Updated Branches:
>>   refs/heads/master f884234a8 -> 4aa7df826
>> 
>> 
>> Add PerformanceSensitive annotation.
>> 
>> 
>> 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/4aa7df82 <http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/4aa7df82>
>> Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/4aa7df82 <http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/4aa7df82>
>> Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/4aa7df82 <http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/4aa7df82>
>> 
>> Branch: refs/heads/master
>> Commit: 4aa7df826de7e359ac3bde98597fe5ca6e4b5901
>> Parents: f884234
>> Author: Matt Sicker <boards@gmail.com <>>
>> Authored: Sun Feb 21 21:02:51 2016 -0600
>> Committer: Matt Sicker <boards@gmail.com <>>
>> Committed: Sun Feb 21 21:02:51 2016 -0600
>> 
>> ----------------------------------------------------------------------
>>  .../log4j/util/PerformanceSensitive.java        | 29 ++++++++++++++++++++
>>  .../logging/log4j/util/ReflectionUtil.java      |  5 ++++
>>  .../log4j/core/config/AppenderControl.java      |  4 +++
>>  .../core/config/AppenderControlArraySet.java    |  8 ++++--
>>  4 files changed, 43 insertions(+), 3 deletions(-)
>> ----------------------------------------------------------------------
>> 
>> 
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4aa7df82/log4j-api/src/main/java/org/apache/logging/log4j/util/PerformanceSensitive.java
<http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4aa7df82/log4j-api/src/main/java/org/apache/logging/log4j/util/PerformanceSensitive.java>
>> ----------------------------------------------------------------------
>> diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/PerformanceSensitive.java
b/log4j-api/src/main/java/org/apache/logging/log4j/util/PerformanceSensitive.java
>> new file mode 100644
>> index 0000000..3fbb058
>> --- /dev/null
>> +++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/PerformanceSensitive.java
>> @@ -0,0 +1,29 @@
>> +/*
>> + * 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.util;
>> +
>> +/**
>> + * Indicates that a particular annotated construct was written with certain performance
constraints in mind that
>> + * should be considered when modifying or testing.
>> + *
>> + * @since 2.6
>> + */
>> +public @interface PerformanceSensitive {
>> +    /** Description of why this is written the way it is. */
>> +    String value() default "";
>> +}
>> 
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4aa7df82/log4j-api/src/main/java/org/apache/logging/log4j/util/ReflectionUtil.java
<http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4aa7df82/log4j-api/src/main/java/org/apache/logging/log4j/util/ReflectionUtil.java>
>> ----------------------------------------------------------------------
>> diff --git a/log4j-api/src/main/java/org/apache/logging/log4j/util/ReflectionUtil.java
b/log4j-api/src/main/java/org/apache/logging/log4j/util/ReflectionUtil.java
>> index 6e7ce4a..dec2350 100644
>> --- a/log4j-api/src/main/java/org/apache/logging/log4j/util/ReflectionUtil.java
>> +++ b/log4j-api/src/main/java/org/apache/logging/log4j/util/ReflectionUtil.java
>> @@ -117,6 +117,7 @@ public final class ReflectionUtil {
>>      // (MS) I believe this would work without any modifications elsewhere, but I
could be wrong
>> 
>>      // migrated from ReflectiveCallerClassUtility
>> +    @PerformanceSensitive
>>      public static Class<?> getCallerClass(final int depth) {
>>          if (depth < 0) {
>>              throw new IndexOutOfBoundsException(Integer.toString(depth));
>> @@ -193,11 +194,13 @@ public final class ReflectionUtil {
>>      }
>> 
>>      // migrated from ClassLoaderContextSelector
>> +    @PerformanceSensitive
>>      public static Class<?> getCallerClass(final String fqcn) {
>>          return getCallerClass(fqcn, Strings.EMPTY);
>>      }
>> 
>>      // migrated from Log4jLoggerFactory
>> +    @PerformanceSensitive
>>      public static Class<?> getCallerClass(final String fqcn, final String
pkg) {
>>          if (supportsFastReflection()) {
>>              boolean next = false;
>> @@ -227,6 +230,7 @@ public final class ReflectionUtil {
>>      }
>> 
>>      // added for use in LoggerAdapter implementations mainly
>> +    @PerformanceSensitive
>>      public static Class<?> getCallerClass(final Class<?> anchor) {
>>          if (supportsFastReflection()) {
>>              boolean next = false;
>> @@ -270,6 +274,7 @@ public final class ReflectionUtil {
>>      }
>> 
>>      // migrated from ThrowableProxy
>> +    @PerformanceSensitive
>>      public static Stack<Class<?>> getCurrentStackTrace() {
>>          // benchmarks show that using the SecurityManager is much faster than looping
through getCallerClass(int)
>>          if (SECURITY_MANAGER != null) {
>> 
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4aa7df82/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
<http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4aa7df82/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java>
>> ----------------------------------------------------------------------
>> diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
>> index f65011d..175c9e1 100644
>> --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
>> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControl.java
>> @@ -25,6 +25,7 @@ import org.apache.logging.log4j.core.LogEvent;
>>  import org.apache.logging.log4j.core.appender.AppenderLoggingException;
>>  import org.apache.logging.log4j.core.filter.AbstractFilterable;
>>  import org.apache.logging.log4j.core.filter.Filterable;
>> +import org.apache.logging.log4j.util.PerformanceSensitive;
>> 
>>  /**
>>   * Wraps an {@link Appender} with details an appender implementation shouldn't need
to know about.
>> @@ -88,14 +89,17 @@ public class AppenderControl extends AbstractFilterable {
>>          return isFilteredByAppenderControl(event) || isFilteredByLevel(event) ||
isRecursiveCall();
>>      }
>> 
>> +    @PerformanceSensitive
>>      private boolean isFilteredByAppenderControl(final LogEvent event) {
>>          return getFilter() != null && Filter.Result.DENY == getFilter().filter(event);
>>      }
>> 
>> +    @PerformanceSensitive
>>      private boolean isFilteredByLevel(final LogEvent event) {
>>          return level != null && intLevel < event.getLevel().intLevel();
>>      }
>> 
>> +    @PerformanceSensitive
>>      private boolean isRecursiveCall() {
>>          if (recursive.get() != null) {
>>              appenderErrorHandlerMessage("Recursive call to appender ");
>> 
>> http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4aa7df82/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java
<http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/4aa7df82/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java>
>> ----------------------------------------------------------------------
>> diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java
b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java
>> index 78a42b3..d30ce32 100644
>> --- a/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java
>> +++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/config/AppenderControlArraySet.java
>> @@ -16,17 +16,19 @@
>>   */
>>  package org.apache.logging.log4j.core.config;
>> 
>> -import org.apache.logging.log4j.core.Appender;
>> -
>>  import java.util.Arrays;
>>  import java.util.HashMap;
>>  import java.util.Map;
>>  import java.util.Objects;
>>  import java.util.concurrent.atomic.AtomicReference;
>> 
>> +import org.apache.logging.log4j.core.Appender;
>> +import org.apache.logging.log4j.util.PerformanceSensitive;
>> +
>>  /**
>>   * Data structure with similar semantics to CopyOnWriteArraySet, but giving direct
access to the underlying array.
>>   */
>> +@PerformanceSensitive
>>  public class AppenderControlArraySet {
>>      private final AtomicReference<AppenderControl[]> appenderArray = new AtomicReference<>(new
AppenderControl[0]);
>> 
>> @@ -117,4 +119,4 @@ public class AppenderControlArraySet {
>>      public AppenderControl[] get() {
>>          return appenderArray.get();
>>      }
>> -}
>> \ No newline at end of file
>> +}
>> 
>> 
>> 
>> 
>> -- 
>> E-Mail: garydgregory@gmail.com <> | ggregory@apache.org  <>
>> 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 <boards@gmail.com <>>
>> 
>> 
>> 
>> -- 
>> E-Mail: garydgregory@gmail.com <> | ggregory@apache.org  <>
>> 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 <boards@gmail.com <mailto:boards@gmail.com>>
> 
> 
> 
> -- 
> Matt Sicker <boards@gmail.com <mailto:boards@gmail.com>>


Mime
View raw message