You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by rp...@apache.org on 2015/08/16 15:28:04 UTC
logging-log4j2 git commit: refactored AppenderControl::callAppender
into smaller methods to enable inlining: after running a test with
-XX:+PrintCompilation -XX:+UnlockDiagnosticVMOptions -XX:+PrintInlining I
found "...AppenderControl::callAppender (405
Repository: logging-log4j2
Updated Branches:
refs/heads/master 5a55b7365 -> ceb0a6208
refactored AppenderControl::callAppender into smaller methods to enable
inlining:
after running a test with -XX:+PrintCompilation
-XX:+UnlockDiagnosticVMOptions -XX:+PrintInlining
I found "...AppenderControl::callAppender (405 bytes) hot method too
big".
The new code is all inlined after ~7000 invocations.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/ceb0a620
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/ceb0a620
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/ceb0a620
Branch: refs/heads/master
Commit: ceb0a6208ef62a8100cf40e8882abc9515b26147
Parents: 5a55b73
Author: rpopma <rp...@apache.org>
Authored: Sun Aug 16 22:28:11 2015 +0900
Committer: rpopma <rp...@apache.org>
Committed: Sun Aug 16 22:28:11 2015 +0900
----------------------------------------------------------------------
.../log4j/core/config/AppenderControl.java | 113 +++++++++++++------
1 file changed, 76 insertions(+), 37 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/ceb0a620/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 e40c7f0..cff78b8 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
@@ -66,51 +66,90 @@ public class AppenderControl extends AbstractFilterable {
* @param event The event to process.
*/
public void callAppender(final LogEvent event) {
- if (getFilter() != null) {
- final Filter.Result r = getFilter().filter(event);
- if (r == Filter.Result.DENY) {
- return;
- }
- }
- if (level != null && intLevel < event.getLevel().intLevel()) {
+ if (shouldSkip(event)) {
return;
}
+ callAppenderPreventRecursion(event);
+ }
+
+ private boolean shouldSkip(final LogEvent event) {
+ return isFilteredByAppenderControl(event) || isFilteredByLevel(event) || isRecursiveCall();
+ }
+
+ private boolean isFilteredByAppenderControl(final LogEvent event) {
+ return getFilter() != null && Filter.Result.DENY == getFilter().filter(event);
+ }
+
+ private boolean isFilteredByLevel(final LogEvent event) {
+ return level != null && intLevel < event.getLevel().intLevel();
+ }
+
+ private boolean isRecursiveCall() {
if (recursive.get() != null) {
- appender.getHandler().error("Recursive call to appender " + appender.getName());
- return;
+ appenderErrorHandlerMessage("Recursive call to appender ");
+ return true;
}
+ return false;
+ }
+
+ private String appenderErrorHandlerMessage(final String prefix) {
+ String result = createErrorMsg(prefix);
+ appender.getHandler().error(result);
+ return result;
+ }
+
+ private void callAppenderPreventRecursion(final LogEvent event) {
try {
- recursive.set(this);
-
- if (!appender.isStarted()) {
- appender.getHandler().error("Attempted to append to non-started appender " + appender.getName());
-
- if (!appender.ignoreExceptions()) {
- throw new AppenderLoggingException(
- "Attempted to append to non-started appender " + appender.getName());
- }
- }
-
- if (appender instanceof Filterable && ((Filterable) appender).isFiltered(event)) {
- return;
- }
-
- try {
- appender.append(event);
- } catch (final RuntimeException ex) {
- appender.getHandler().error("An exception occurred processing Appender " + appender.getName(), ex);
- if (!appender.ignoreExceptions()) {
- throw ex;
- }
- } catch (final Exception ex) {
- appender.getHandler().error("An exception occurred processing Appender " + appender.getName(), ex);
- if (!appender.ignoreExceptions()) {
- throw new AppenderLoggingException(ex);
- }
- }
+ recursive.set(this);
+ callAppender0(event);
} finally {
recursive.set(null);
}
}
+ private void callAppender0(final LogEvent event) {
+ ensureAppenderStarted();
+ if (!isFilteredByAppender(event)) {
+ tryCallAppender(event);
+ }
+ }
+
+ private void ensureAppenderStarted() {
+ if (!appender.isStarted()) {
+ handleError("Attempted to append to non-started appender ");
+ }
+ }
+
+ private void handleError(final String prefix) {
+ final String msg = appenderErrorHandlerMessage(prefix);
+ if (!appender.ignoreExceptions()) {
+ throw new AppenderLoggingException(msg);
+ }
+ }
+
+ private String createErrorMsg(final String prefix) {
+ final String msg = prefix + appender.getName();
+ return msg;
+ }
+
+ private boolean isFilteredByAppender(final LogEvent event) {
+ return appender instanceof Filterable && ((Filterable) appender).isFiltered(event);
+ }
+
+ private void tryCallAppender(final LogEvent event) {
+ try {
+ appender.append(event);
+ } catch (final RuntimeException ex) {
+ handleAppenderError(ex);
+ } catch (final Exception ex) {
+ handleAppenderError(new AppenderLoggingException(ex));
+ }
+ }
+
+ private void handleAppenderError(final RuntimeException ex) {
+ appender.getHandler().error(createErrorMsg("An exception occurred processing Appender "), ex);
+ if (!appender.ignoreExceptions()) {
+ throw ex;
+ }
+ }
}