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/11/28 17:15:55 UTC
[12/46] logging-log4j2 git commit: LOG4J2-435 Factored out file size
parsing logic into helper class
LOG4J2-435 Factored out file size parsing logic into helper class
Project: http://git-wip-us.apache.org/repos/asf/logging-log4j2/repo
Commit: http://git-wip-us.apache.org/repos/asf/logging-log4j2/commit/b7781d69
Tree: http://git-wip-us.apache.org/repos/asf/logging-log4j2/tree/b7781d69
Diff: http://git-wip-us.apache.org/repos/asf/logging-log4j2/diff/b7781d69
Branch: refs/heads/master
Commit: b7781d69649a0c137951cfd795a132460ae9786a
Parents: e233f8c
Author: rpopma <rp...@apache.org>
Authored: Thu Nov 26 23:34:43 2015 +0900
Committer: rpopma <rp...@apache.org>
Committed: Thu Nov 26 23:34:43 2015 +0900
----------------------------------------------------------------------
.../log4j/core/appender/rolling/FileSize.java | 90 ++++++++++++++++++++
.../rolling/SizeBasedTriggeringPolicy.java | 61 +------------
2 files changed, 91 insertions(+), 60 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b7781d69/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FileSize.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FileSize.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FileSize.java
new file mode 100644
index 0000000..e134b1f
--- /dev/null
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/FileSize.java
@@ -0,0 +1,90 @@
+/*
+ * 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;
+
+import java.text.NumberFormat;
+import java.text.ParseException;
+import java.util.Locale;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.status.StatusLogger;
+
+/**
+ * FileSize utility class.
+ */
+public final class FileSize {
+ private static final Logger LOGGER = StatusLogger.getLogger();
+
+ private static final long KB = 1024;
+ private static final long MB = KB * KB;
+ private static final long GB = KB * MB;
+
+ /**
+ * Pattern for string parsing.
+ */
+ private static final Pattern VALUE_PATTERN =
+ Pattern.compile("([0-9]+([\\.,][0-9]+)?)\\s*(|K|M|G)B?", Pattern.CASE_INSENSITIVE);
+
+ private FileSize() {
+ }
+
+ /**
+ * Converts a string to a number of bytes. Strings consist of a floating point value followed by
+ * K, M, or G for kilobytes, megabytes, gigabytes, respectively. The
+ * abbreviations KB, MB, and GB are also accepted. Matching is case insensitive.
+ *
+ * @param string The string to convert
+ * @return The Bytes value for the string
+ */
+ public static long parse(final String string, long defaultValue) {
+ final Matcher matcher = VALUE_PATTERN.matcher(string);
+
+ // Valid input?
+ if (matcher.matches()) {
+ try {
+ // Get double precision value
+ final long value = NumberFormat.getNumberInstance(Locale.getDefault()).parse(
+ matcher.group(1)).longValue();
+
+ // Get units specified
+ final String units = matcher.group(3);
+
+ if (units.isEmpty()) {
+ return value;
+ } else if (units.equalsIgnoreCase("K")) {
+ return value * KB;
+ } else if (units.equalsIgnoreCase("M")) {
+ return value * MB;
+ } else if (units.equalsIgnoreCase("G")) {
+ return value * GB;
+ } else {
+ LOGGER.error("FileSize units not recognized: " + string);
+ return defaultValue;
+ }
+ } catch (final ParseException e) {
+ LOGGER.error("FileSize unable to parse numeric part: " + string, e);
+ return defaultValue;
+ }
+ }
+ LOGGER.error("FileSize unable to parse bytes: " + string);
+ return defaultValue;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/logging-log4j2/blob/b7781d69/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java
----------------------------------------------------------------------
diff --git a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java
index 1966562..712d5a6 100644
--- a/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java
+++ b/log4j-core/src/main/java/org/apache/logging/log4j/core/appender/rolling/SizeBasedTriggeringPolicy.java
@@ -16,12 +16,6 @@
*/
package org.apache.logging.log4j.core.appender.rolling;
-import java.text.NumberFormat;
-import java.text.ParseException;
-import java.util.Locale;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LogEvent;
import org.apache.logging.log4j.core.config.plugins.Plugin;
@@ -39,22 +33,11 @@ public class SizeBasedTriggeringPolicy implements TriggeringPolicy {
*/
protected static final Logger LOGGER = StatusLogger.getLogger();
- private static final long KB = 1024;
- private static final long MB = KB * KB;
- private static final long GB = KB * MB;
-
/**
* Rollover threshold size in bytes.
*/
private static final long MAX_FILE_SIZE = 10 * 1024 * 1024; // let 10 MB the default max size
-
- /**
- * Pattern for string parsing.
- */
- private static final Pattern VALUE_PATTERN =
- Pattern.compile("([0-9]+([\\.,][0-9]+)?)\\s*(|K|M|G)B?", Pattern.CASE_INSENSITIVE);
-
private final long maxFileSize;
private RollingFileManager manager;
@@ -116,50 +99,8 @@ public class SizeBasedTriggeringPolicy implements TriggeringPolicy {
@PluginFactory
public static SizeBasedTriggeringPolicy createPolicy(@PluginAttribute("size") final String size) {
- final long maxSize = size == null ? MAX_FILE_SIZE : valueOf(size);
+ final long maxSize = size == null ? MAX_FILE_SIZE : FileSize.parse(size, MAX_FILE_SIZE);
return new SizeBasedTriggeringPolicy(maxSize);
}
- /**
- * Converts a string to a number of bytes. Strings consist of a floating point value followed by
- * K, M, or G for kilobytes, megabytes, gigabytes, respectively. The
- * abbreviations KB, MB, and GB are also accepted. Matching is case insensitive.
- *
- * @param string The string to convert
- * @return The Bytes value for the string
- */
- private static long valueOf(final String string) {
- final Matcher matcher = VALUE_PATTERN.matcher(string);
-
- // Valid input?
- if (matcher.matches()) {
- try {
- // Get double precision value
- final long value = NumberFormat.getNumberInstance(Locale.getDefault()).parse(
- matcher.group(1)).longValue();
-
- // Get units specified
- final String units = matcher.group(3);
-
- if (units.isEmpty()) {
- return value;
- } else if (units.equalsIgnoreCase("K")) {
- return value * KB;
- } else if (units.equalsIgnoreCase("M")) {
- return value * MB;
- } else if (units.equalsIgnoreCase("G")) {
- return value * GB;
- } else {
- LOGGER.error("Units not recognized: " + string);
- return MAX_FILE_SIZE;
- }
- } catch (final ParseException e) {
- LOGGER.error("Unable to parse numeric part: " + string, e);
- return MAX_FILE_SIZE;
- }
- }
- LOGGER.error("Unable to parse bytes: " + string);
- return MAX_FILE_SIZE;
- }
-
}