aboutsummaryrefslogtreecommitdiffstats
path: root/common/src/com/android/utils/StdLogger.java
diff options
context:
space:
mode:
authorXavier Ducrohet <xav@android.com>2012-08-15 15:19:25 -0700
committerXavier Ducrohet <xav@android.com>2012-08-15 16:27:06 -0700
commitbce43e3b692e09854ec7390411b6d5a7ccd60880 (patch)
tree62c59a9cfb2172407ec1239fc0a66dbfe97aab60 /common/src/com/android/utils/StdLogger.java
parent2528d6f1dd7074f6a3e3b2e4d31ccc76c62558a8 (diff)
downloadsdk-bce43e3b692e09854ec7390411b6d5a7ccd60880.zip
sdk-bce43e3b692e09854ec7390411b6d5a7ccd60880.tar.gz
sdk-bce43e3b692e09854ec7390411b6d5a7ccd60880.tar.bz2
Create new logging class in the common library.
The goal is to later migrate all existing code to this new logger and get rid of all our duplicates. Also did a misc fix in AndroidLocation. Change-Id: Ia33a782b57c91b4e3d5fd2c0660e040be11b9cbb
Diffstat (limited to 'common/src/com/android/utils/StdLogger.java')
-rw-r--r--common/src/com/android/utils/StdLogger.java177
1 files changed, 177 insertions, 0 deletions
diff --git a/common/src/com/android/utils/StdLogger.java b/common/src/com/android/utils/StdLogger.java
new file mode 100644
index 0000000..c0de06f
--- /dev/null
+++ b/common/src/com/android/utils/StdLogger.java
@@ -0,0 +1,177 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed 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 com.android.utils;
+
+import com.android.SdkConstants;
+import com.android.annotations.NonNull;
+
+import java.io.PrintStream;
+import java.util.Formatter;
+
+
+/**
+ * An implementation of {@link ILogger} that prints to {@link System#out} and {@link System#err}.
+ * <p/>
+ *
+ */
+public class StdLogger implements ILogger {
+
+ private final Level mLevel;
+
+ public enum Level {
+ VERBOSE(0),
+ INFO(1),
+ WARNING(2),
+ ERROR(3);
+
+ private final int mLevel;
+
+ Level(int level) {
+ mLevel = level;
+ }
+ }
+
+ /**
+ * Creates the {@link StdLogger} with a given log {@link Level}.
+ * @param level the log Level.
+ */
+ public StdLogger(@NonNull Level level) {
+ if (level == null) {
+ throw new IllegalArgumentException("level cannot be null");
+ }
+
+ mLevel = level;
+ }
+
+ /**
+ * Returns the logger's log {@link Level}.
+ * @return the log level.
+ */
+ public Level getLevel() {
+ return mLevel;
+ }
+
+ /**
+ * Prints an error message.
+ * <p/>
+ * The message will be tagged with "Error" on the output so the caller does not
+ * need to put such a prefix in the format string.
+ * <p/>
+ * The output is done on {@link System#err}.
+ * <p/>
+ * This is always displayed, independent of the logging {@link Level}.
+ *
+ * @param t is an optional {@link Throwable} or {@link Exception}. If non-null, it's
+ * message will be printed out.
+ * @param errorFormat is an optional error format. If non-null, it will be printed
+ * using a {@link Formatter} with the provided arguments.
+ * @param args provides the arguments for errorFormat.
+ */
+ @Override
+ public void error(Throwable t, String errorFormat, Object... args) {
+ if (errorFormat != null) {
+ String msg = String.format("Error: " + errorFormat, args);
+
+ printMessage(msg, System.err);
+ }
+ if (t != null) {
+ System.err.println(String.format("Error: %1$s", t.getMessage()));
+ }
+ }
+
+ /**
+ * Prints a warning message.
+ * <p/>
+ * The message will be tagged with "Warning" on the output so the caller does not
+ * need to put such a prefix in the format string.
+ * <p/>
+ * The output is done on {@link System#out}.
+ * <p/>
+ * This is displayed only if the logging {@link Level} is {@link Level#WARNING} or higher.
+ *
+ * @param msgFormat is a string format to be used with a {@link Formatter}. Cannot be null.
+ * @param args provides the arguments for warningFormat.
+ */
+ @Override
+ public void warning(@NonNull String warningFormat, Object... args) {
+ if (mLevel.mLevel > Level.WARNING.mLevel) {
+ return;
+ }
+
+ String msg = String.format("Warning: " + warningFormat, args);
+
+ printMessage(msg, System.out);
+ }
+
+ /**
+ * Prints an info message.
+ * <p/>
+ * The output is done on {@link System#out}.
+ * <p/>
+ * This is displayed only if the logging {@link Level} is {@link Level#INFO} or higher.
+ *
+ * @param msgFormat is a string format to be used with a {@link Formatter}. Cannot be null.
+ * @param args provides the arguments for msgFormat.
+ */
+ @Override
+ public void info(@NonNull String msgFormat, Object... args) {
+ if (mLevel.mLevel > Level.INFO.mLevel) {
+ return;
+ }
+
+ String msg = String.format(msgFormat, args);
+
+ printMessage(msg, System.out);
+ }
+
+ /**
+ * Prints a verbose message.
+ * <p/>
+ * The output is done on {@link System#out}.
+ * <p/>
+ * This is displayed only if the logging {@link Level} is {@link Level#VERBOSE} or higher.
+ *
+ * @param msgFormat is a string format to be used with a {@link Formatter}. Cannot be null.
+ * @param args provides the arguments for msgFormat.
+ */
+ @Override
+ public void verbose(@NonNull String msgFormat, Object... args) {
+ if (mLevel.mLevel > Level.VERBOSE.mLevel) {
+ return;
+ }
+
+ String msg = String.format(msgFormat, args);
+
+ printMessage(msg, System.out);
+ }
+
+ private void printMessage(String msg, PrintStream stream) {
+ if (SdkConstants.CURRENT_PLATFORM == SdkConstants.PLATFORM_WINDOWS &&
+ !msg.endsWith("\r\n") &&
+ msg.endsWith("\n")) {
+ // remove last \n so that println can use \r\n as needed.
+ msg = msg.substring(0, msg.length() - 1);
+ }
+
+ stream.print(msg);
+
+ if (!msg.endsWith("\n")) {
+ stream.println();
+ }
+ }
+
+}