You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by mi...@apache.org on 2016/04/18 13:38:27 UTC
[41/50] logging-log4j2 git commit: Statement unnecessarily nested.
Statement unnecessarily nested.
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/a7f60a25
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/a7f60a25
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/a7f60a25
Branch: refs/heads/LOG4J2-1365
Commit: a7f60a25a89126cd183ed5181ab526fcfbd213c2
Parents: 9a563a6
Author: ggregory <gg...@apache.org>
Authored: Sun Apr 17 16:55:32 2016 -0700
Committer: ggregory <gg...@apache.org>
Committed: Sun Apr 17 16:55:32 2016 -0700
----------------------------------------------------------------------
.../appender/rolling/action/DeleteAction.java | 432 +++++++++----------
.../logging/log4j/core/impl/Log4jLogEvent.java | 3 +-
.../logging/log4j/core/layout/GelfLayout.java | 9 +-
.../core/pattern/DatePatternConverter.java | 3 +-
4 files changed, 220 insertions(+), 227 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/a7f60a25/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/DeleteAction.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/DeleteAction.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/DeleteAction.java
index c2c385f..8176470 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/DeleteAction.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/action/DeleteAction.java
@@ -1,218 +1,214 @@
-/*
- * 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.appender.rolling.action;
-
-import java.io.IOException;
-import java.nio.file.FileVisitor;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.List;
-import java.util.Objects;
-
-import org.apache.logging.log4j.core.config.Configuration;
-import org.apache.logging.log4j.core.config.plugins.Plugin;
-import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
-import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
-import org.apache.logging.log4j.core.config.plugins.PluginElement;
-import org.apache.logging.log4j.core.config.plugins.PluginFactory;
-import org.apache.logging.log4j.core.lookup.StrSubstitutor;
-
-/**
- * Rollover or scheduled action for deleting old log files that are accepted by the specified PathFilters.
- */
-@Plugin(name = "Delete", category = "Core", printObject = true)
-public class DeleteAction extends AbstractPathAction {
-
- private final PathSorter pathSorter;
- private final boolean testMode;
- private final ScriptCondition scriptCondition;
-
- /**
- * Creates a new DeleteAction that starts scanning for files to delete from the specified base path.
- *
- * @param basePath base path from where to start scanning for files to delete.
- * @param followSymbolicLinks whether to follow symbolic links. Default is false.
- * @param maxDepth The maxDepth parameter is the maximum number of levels of directories to visit. A value of 0
- * means that only the starting file is visited, unless denied by the security manager. A value of
- * MAX_VALUE may be used to indicate that all levels should be visited.
- * @param testMode if true, files are not deleted but instead a message is printed to the <a
- * href="http://logging.apache.org/log4j/2.x/manual/configuration.html#StatusMessages">status logger</a>
- * at INFO level. Users can use this to do a dry run to test if their configuration works as expected.
- * @param sorter sorts
- * @param pathConditions an array of path filters (if more than one, they all need to accept a path before it is
- * deleted).
- * @param scriptCondition
- */
- DeleteAction(final String basePath, final boolean followSymbolicLinks, final int maxDepth, final boolean testMode,
- final PathSorter sorter, final PathCondition[] pathConditions, final ScriptCondition scriptCondition,
- final StrSubstitutor subst) {
- super(basePath, followSymbolicLinks, maxDepth, pathConditions, subst);
- this.testMode = testMode;
- this.pathSorter = Objects.requireNonNull(sorter, "sorter");
- this.scriptCondition = scriptCondition;
- if (scriptCondition == null && (pathConditions == null || pathConditions.length == 0)) {
- LOGGER.error("Missing Delete conditions: unconditional Delete not supported");
- throw new IllegalArgumentException("Unconditional Delete not supported");
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.apache.logging.log4j.core.appender.rolling.action.AbstractPathAction#execute()
- */
- @Override
- public boolean execute() throws IOException {
- if (scriptCondition != null) {
- return executeScript();
- } else {
- return super.execute();
- }
- }
-
- private boolean executeScript() throws IOException {
- final List<PathWithAttributes> selectedForDeletion = callScript();
- if (selectedForDeletion == null) {
- LOGGER.trace("Script returned null list (no files to delete)");
- return true;
- }
- deleteSelectedFiles(selectedForDeletion);
- return true;
- }
-
- private List<PathWithAttributes> callScript() throws IOException {
- final List<PathWithAttributes> sortedPaths = getSortedPaths();
- trace("Sorted paths:", sortedPaths);
- final List<PathWithAttributes> result = scriptCondition.selectFilesToDelete(getBasePath(), sortedPaths);
- return result;
- }
-
- private void deleteSelectedFiles(final List<PathWithAttributes> selectedForDeletion) throws IOException {
- trace("Paths the script selected for deletion:", selectedForDeletion);
- for (final PathWithAttributes pathWithAttributes : selectedForDeletion) {
- final Path path = pathWithAttributes == null ? null : pathWithAttributes.getPath();
- if (isTestMode()) {
- LOGGER.info("Deleting {} (TEST MODE: file not actually deleted)", path);
- } else {
- delete(path);
- }
- }
- }
-
- /**
- * Deletes the specified file.
- *
- * @param path the file to delete
- * @throws IOException if a problem occurred deleting the file
- */
- protected void delete(final Path path) throws IOException {
- LOGGER.trace("Deleting {}", path);
- Files.deleteIfExists(path);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.apache.logging.log4j.core.appender.rolling.action.AbstractPathAction#execute(FileVisitor)
- */
- @Override
- public boolean execute(final FileVisitor<Path> visitor) throws IOException {
- final List<PathWithAttributes> sortedPaths = getSortedPaths();
- trace("Sorted paths:", sortedPaths);
-
- for (PathWithAttributes element : sortedPaths) {
- try {
- visitor.visitFile(element.getPath(), element.getAttributes());
- } catch (final IOException ioex) {
- LOGGER.error("Error in post-rollover Delete when visiting {}", element.getPath(), ioex);
- visitor.visitFileFailed(element.getPath(), ioex);
- }
- }
- // TODO return (visitor.success || ignoreProcessingFailure)
- return true; // do not abort rollover even if processing failed
- }
-
- private void trace(final String label, final List<PathWithAttributes> sortedPaths) {
- LOGGER.trace(label);
- for (final PathWithAttributes pathWithAttributes : sortedPaths) {
- LOGGER.trace(pathWithAttributes);
- }
- }
-
- /**
- * Returns a sorted list of all files up to maxDepth under the basePath.
- *
- * @return a sorted list of files
- * @throws IOException
- */
- List<PathWithAttributes> getSortedPaths() throws IOException {
- final SortingVisitor sort = new SortingVisitor(pathSorter);
- super.execute(sort);
- final List<PathWithAttributes> sortedPaths = sort.getSortedPaths();
- return sortedPaths;
- }
-
- /**
- * Returns {@code true} if files are not deleted even when all conditions accept a path, {@code false} otherwise.
- *
- * @return {@code true} if files are not deleted even when all conditions accept a path, {@code false} otherwise
- */
- public boolean isTestMode() {
- return testMode;
- }
-
- @Override
- protected FileVisitor<Path> createFileVisitor(final Path visitorBaseDir, final List<PathCondition> conditions) {
- return new DeletingVisitor(visitorBaseDir, conditions, testMode);
- }
-
- /**
- * Create a DeleteAction.
- *
- * @param basePath base path from where to start scanning for files to delete.
- * @param followLinks whether to follow symbolic links. Default is false.
- * @param maxDepth The maxDepth parameter is the maximum number of levels of directories to visit. A value of 0
- * means that only the starting file is visited, unless denied by the security manager. A value of
- * MAX_VALUE may be used to indicate that all levels should be visited.
- * @param testMode if true, files are not deleted but instead a message is printed to the <a
- * href="http://logging.apache.org/log4j/2.x/manual/configuration.html#StatusMessages">status logger</a>
- * at INFO level. Users can use this to do a dry run to test if their configuration works as expected.
- * Default is false.
- * @param PathSorter a plugin implementing the {@link PathSorter} interface
- * @param PathConditions an array of path conditions (if more than one, they all need to accept a path before it is
- * deleted).
- * @param config The Configuration.
- * @return A DeleteAction.
- */
- @PluginFactory
- public static DeleteAction createDeleteAction(
- // @formatter:off
- @PluginAttribute("basePath") final String basePath, //
- @PluginAttribute(value = "followLinks", defaultBoolean = false) final boolean followLinks,
- @PluginAttribute(value = "maxDepth", defaultInt = 1) final int maxDepth,
- @PluginAttribute(value = "testMode", defaultBoolean = false) final boolean testMode,
- @PluginElement("PathSorter") final PathSorter sorterParameter,
- @PluginElement("PathConditions") final PathCondition[] pathConditions,
- @PluginElement("ScriptCondition") final ScriptCondition scriptCondition,
- @PluginConfiguration final Configuration config) {
- // @formatter:on
- final PathSorter sorter = sorterParameter == null ? new PathSortByModificationTime(true) : sorterParameter;
- return new DeleteAction(basePath, followLinks, maxDepth, testMode, sorter, pathConditions, scriptCondition,
- config.getStrSubstitutor());
- }
-}
+/*
+ * 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.appender.rolling.action;
+
+import java.io.IOException;
+import java.nio.file.FileVisitor;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.List;
+import java.util.Objects;
+
+import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.config.plugins.Plugin;
+import org.apache.logging.log4j.core.config.plugins.PluginAttribute;
+import org.apache.logging.log4j.core.config.plugins.PluginConfiguration;
+import org.apache.logging.log4j.core.config.plugins.PluginElement;
+import org.apache.logging.log4j.core.config.plugins.PluginFactory;
+import org.apache.logging.log4j.core.lookup.StrSubstitutor;
+
+/**
+ * Rollover or scheduled action for deleting old log files that are accepted by the specified PathFilters.
+ */
+@Plugin(name = "Delete", category = "Core", printObject = true)
+public class DeleteAction extends AbstractPathAction {
+
+ private final PathSorter pathSorter;
+ private final boolean testMode;
+ private final ScriptCondition scriptCondition;
+
+ /**
+ * Creates a new DeleteAction that starts scanning for files to delete from the specified base path.
+ *
+ * @param basePath base path from where to start scanning for files to delete.
+ * @param followSymbolicLinks whether to follow symbolic links. Default is false.
+ * @param maxDepth The maxDepth parameter is the maximum number of levels of directories to visit. A value of 0
+ * means that only the starting file is visited, unless denied by the security manager. A value of
+ * MAX_VALUE may be used to indicate that all levels should be visited.
+ * @param testMode if true, files are not deleted but instead a message is printed to the <a
+ * href="http://logging.apache.org/log4j/2.x/manual/configuration.html#StatusMessages">status logger</a>
+ * at INFO level. Users can use this to do a dry run to test if their configuration works as expected.
+ * @param sorter sorts
+ * @param pathConditions an array of path filters (if more than one, they all need to accept a path before it is
+ * deleted).
+ * @param scriptCondition
+ */
+ DeleteAction(final String basePath, final boolean followSymbolicLinks, final int maxDepth, final boolean testMode,
+ final PathSorter sorter, final PathCondition[] pathConditions, final ScriptCondition scriptCondition,
+ final StrSubstitutor subst) {
+ super(basePath, followSymbolicLinks, maxDepth, pathConditions, subst);
+ this.testMode = testMode;
+ this.pathSorter = Objects.requireNonNull(sorter, "sorter");
+ this.scriptCondition = scriptCondition;
+ if (scriptCondition == null && (pathConditions == null || pathConditions.length == 0)) {
+ LOGGER.error("Missing Delete conditions: unconditional Delete not supported");
+ throw new IllegalArgumentException("Unconditional Delete not supported");
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.logging.log4j.core.appender.rolling.action.AbstractPathAction#execute()
+ */
+ @Override
+ public boolean execute() throws IOException {
+ return scriptCondition != null ? executeScript() : super.execute();
+ }
+
+ private boolean executeScript() throws IOException {
+ final List<PathWithAttributes> selectedForDeletion = callScript();
+ if (selectedForDeletion == null) {
+ LOGGER.trace("Script returned null list (no files to delete)");
+ return true;
+ }
+ deleteSelectedFiles(selectedForDeletion);
+ return true;
+ }
+
+ private List<PathWithAttributes> callScript() throws IOException {
+ final List<PathWithAttributes> sortedPaths = getSortedPaths();
+ trace("Sorted paths:", sortedPaths);
+ final List<PathWithAttributes> result = scriptCondition.selectFilesToDelete(getBasePath(), sortedPaths);
+ return result;
+ }
+
+ private void deleteSelectedFiles(final List<PathWithAttributes> selectedForDeletion) throws IOException {
+ trace("Paths the script selected for deletion:", selectedForDeletion);
+ for (final PathWithAttributes pathWithAttributes : selectedForDeletion) {
+ final Path path = pathWithAttributes == null ? null : pathWithAttributes.getPath();
+ if (isTestMode()) {
+ LOGGER.info("Deleting {} (TEST MODE: file not actually deleted)", path);
+ } else {
+ delete(path);
+ }
+ }
+ }
+
+ /**
+ * Deletes the specified file.
+ *
+ * @param path the file to delete
+ * @throws IOException if a problem occurred deleting the file
+ */
+ protected void delete(final Path path) throws IOException {
+ LOGGER.trace("Deleting {}", path);
+ Files.deleteIfExists(path);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.apache.logging.log4j.core.appender.rolling.action.AbstractPathAction#execute(FileVisitor)
+ */
+ @Override
+ public boolean execute(final FileVisitor<Path> visitor) throws IOException {
+ final List<PathWithAttributes> sortedPaths = getSortedPaths();
+ trace("Sorted paths:", sortedPaths);
+
+ for (PathWithAttributes element : sortedPaths) {
+ try {
+ visitor.visitFile(element.getPath(), element.getAttributes());
+ } catch (final IOException ioex) {
+ LOGGER.error("Error in post-rollover Delete when visiting {}", element.getPath(), ioex);
+ visitor.visitFileFailed(element.getPath(), ioex);
+ }
+ }
+ // TODO return (visitor.success || ignoreProcessingFailure)
+ return true; // do not abort rollover even if processing failed
+ }
+
+ private void trace(final String label, final List<PathWithAttributes> sortedPaths) {
+ LOGGER.trace(label);
+ for (final PathWithAttributes pathWithAttributes : sortedPaths) {
+ LOGGER.trace(pathWithAttributes);
+ }
+ }
+
+ /**
+ * Returns a sorted list of all files up to maxDepth under the basePath.
+ *
+ * @return a sorted list of files
+ * @throws IOException
+ */
+ List<PathWithAttributes> getSortedPaths() throws IOException {
+ final SortingVisitor sort = new SortingVisitor(pathSorter);
+ super.execute(sort);
+ final List<PathWithAttributes> sortedPaths = sort.getSortedPaths();
+ return sortedPaths;
+ }
+
+ /**
+ * Returns {@code true} if files are not deleted even when all conditions accept a path, {@code false} otherwise.
+ *
+ * @return {@code true} if files are not deleted even when all conditions accept a path, {@code false} otherwise
+ */
+ public boolean isTestMode() {
+ return testMode;
+ }
+
+ @Override
+ protected FileVisitor<Path> createFileVisitor(final Path visitorBaseDir, final List<PathCondition> conditions) {
+ return new DeletingVisitor(visitorBaseDir, conditions, testMode);
+ }
+
+ /**
+ * Create a DeleteAction.
+ *
+ * @param basePath base path from where to start scanning for files to delete.
+ * @param followLinks whether to follow symbolic links. Default is false.
+ * @param maxDepth The maxDepth parameter is the maximum number of levels of directories to visit. A value of 0
+ * means that only the starting file is visited, unless denied by the security manager. A value of
+ * MAX_VALUE may be used to indicate that all levels should be visited.
+ * @param testMode if true, files are not deleted but instead a message is printed to the <a
+ * href="http://logging.apache.org/log4j/2.x/manual/configuration.html#StatusMessages">status logger</a>
+ * at INFO level. Users can use this to do a dry run to test if their configuration works as expected.
+ * Default is false.
+ * @param PathSorter a plugin implementing the {@link PathSorter} interface
+ * @param PathConditions an array of path conditions (if more than one, they all need to accept a path before it is
+ * deleted).
+ * @param config The Configuration.
+ * @return A DeleteAction.
+ */
+ @PluginFactory
+ public static DeleteAction createDeleteAction(
+ // @formatter:off
+ @PluginAttribute("basePath") final String basePath, //
+ @PluginAttribute(value = "followLinks", defaultBoolean = false) final boolean followLinks,
+ @PluginAttribute(value = "maxDepth", defaultInt = 1) final int maxDepth,
+ @PluginAttribute(value = "testMode", defaultBoolean = false) final boolean testMode,
+ @PluginElement("PathSorter") final PathSorter sorterParameter,
+ @PluginElement("PathConditions") final PathCondition[] pathConditions,
+ @PluginElement("ScriptCondition") final ScriptCondition scriptCondition,
+ @PluginConfiguration final Configuration config) {
+ // @formatter:on
+ final PathSorter sorter = sorterParameter == null ? new PathSortByModificationTime(true) : sorterParameter;
+ return new DeleteAction(basePath, followLinks, maxDepth, testMode, sorter, pathConditions, scriptCondition,
+ config.getStrSubstitutor());
+ }
+}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/a7f60a25/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
index c062259..26b35d3 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/impl/Log4jLogEvent.java
@@ -638,9 +638,8 @@ public Log4jLogEvent(final String loggerName, final Marker marker, final String
if (event instanceof Log4jLogEvent) {
event.getThrownProxy(); // ensure ThrowableProxy is initialized
return new LogEventProxy((Log4jLogEvent) event, includeLocation);
- } else {
- return new LogEventProxy(event, includeLocation);
}
+ return new LogEventProxy(event, includeLocation);
}
public static Serializable serialize(final Log4jLogEvent event, final boolean includeLocation) {
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/a7f60a25/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
index 788ce73..dfa07d5 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/layout/GelfLayout.java
@@ -254,12 +254,11 @@ public final class GelfLayout extends AbstractStringLayout {
static CharSequence formatTimestamp(final long timeMillis) {
if (timeMillis < 1000) {
return "0";
- } else {
- StringBuilder builder = getTimestampStringBuilder();
- builder.append(timeMillis);
- builder.insert(builder.length() - 3, '.');
- return builder;
}
+ StringBuilder builder = getTimestampStringBuilder();
+ builder.append(timeMillis);
+ builder.insert(builder.length() - 3, '.');
+ return builder;
}
private static final ThreadLocal<StringBuilder> timestampStringBuilder = new ThreadLocal<>();
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/a7f60a25/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/DatePatternConverter.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/DatePatternConverter.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/DatePatternConverter.java
index b837338..499f0d9 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/DatePatternConverter.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/pattern/DatePatternConverter.java
@@ -175,9 +175,8 @@ public final class DatePatternConverter extends LogEventPatternConverter impleme
final FixedDateFormat fixedDateFormat = FixedDateFormat.createIfSupported(options);
if (fixedDateFormat != null) {
return createFixedFormatter(fixedDateFormat);
- } else {
- return createNonFixedFormatter(options);
}
+ return createNonFixedFormatter(options);
}
/**