170 lines
5.6 KiB
Java
170 lines
5.6 KiB
Java
/*
|
|
* Copyright 2018 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.pump.util;
|
|
|
|
import androidx.annotation.AnyThread;
|
|
import androidx.annotation.NonNull;
|
|
|
|
import com.android.pump.BuildConfig;
|
|
|
|
import java.util.Locale;
|
|
import java.util.regex.Pattern;
|
|
|
|
@AnyThread
|
|
public final class Clog {
|
|
private static final boolean COLORIZE = BuildConfig.DEBUG;
|
|
|
|
public static final int VERBOSE = android.util.Log.VERBOSE;
|
|
public static final int DEBUG = android.util.Log.DEBUG;
|
|
public static final int INFO = android.util.Log.INFO;
|
|
public static final int WARN = android.util.Log.WARN;
|
|
public static final int ERROR = android.util.Log.ERROR;
|
|
public static final int ASSERT = android.util.Log.ASSERT;
|
|
|
|
private static final int COLOR_BLACK = 30;
|
|
private static final int COLOR_RED = 31;
|
|
private static final int COLOR_GREEN = 32;
|
|
private static final int COLOR_YELLOW = 33;
|
|
private static final int COLOR_BLUE = 34;
|
|
private static final int COLOR_MAGENTA = 35;
|
|
private static final int COLOR_CYAN = 36;
|
|
//private static final int COLOR_WHITE = 37;
|
|
|
|
private static final int MAX_TAG_LENGTH = 23;
|
|
private static final int MAX_LINE_LENGTH = 1024;
|
|
|
|
private static final Pattern LINE_BREAKER = Pattern.compile("\\r?\\n");
|
|
|
|
private Clog() { }
|
|
|
|
public static @NonNull String tag(@NonNull Class<?> clazz) {
|
|
String tag = clazz.getSimpleName();
|
|
return tag.substring(0, Math.min(tag.length(), MAX_TAG_LENGTH));
|
|
}
|
|
|
|
public static int v(@NonNull String tag, @NonNull String msg) {
|
|
return println(VERBOSE, tag, msg);
|
|
}
|
|
|
|
public static int v(@NonNull String tag, @NonNull String msg, @NonNull Throwable tr) {
|
|
return println(VERBOSE, tag, msg + '\n' + getStackTraceString(tr));
|
|
}
|
|
|
|
public static int d(@NonNull String tag, @NonNull String msg) {
|
|
return println(DEBUG, tag, msg);
|
|
}
|
|
|
|
public static int d(@NonNull String tag, @NonNull String msg, @NonNull Throwable tr) {
|
|
return println(DEBUG, tag, msg + '\n' + getStackTraceString(tr));
|
|
}
|
|
|
|
public static int i(@NonNull String tag, @NonNull String msg) {
|
|
return println(INFO, tag, msg);
|
|
}
|
|
|
|
public static int i(@NonNull String tag, @NonNull String msg, @NonNull Throwable tr) {
|
|
return println(INFO, tag, msg + '\n' + getStackTraceString(tr));
|
|
}
|
|
|
|
public static int w(@NonNull String tag, @NonNull String msg) {
|
|
return println(WARN, tag, msg);
|
|
}
|
|
|
|
public static int w(@NonNull String tag, @NonNull String msg, @NonNull Throwable tr) {
|
|
return println(WARN, tag, msg + '\n' + getStackTraceString(tr));
|
|
}
|
|
|
|
public static boolean isLoggable(@NonNull String tag, int level) {
|
|
return android.util.Log.isLoggable(tag, level);
|
|
}
|
|
|
|
public static int w(@NonNull String tag, @NonNull Throwable tr) {
|
|
return println(WARN, tag, getStackTraceString(tr));
|
|
}
|
|
|
|
public static int e(@NonNull String tag, @NonNull String msg) {
|
|
return println(ERROR, tag, msg);
|
|
}
|
|
|
|
public static int e(@NonNull String tag, @NonNull String msg, @NonNull Throwable tr) {
|
|
return println(ERROR, tag, msg + '\n' + getStackTraceString(tr));
|
|
}
|
|
|
|
public static int wtf(@NonNull String tag, @NonNull String msg) {
|
|
return android.util.Log.wtf(tag, msg);
|
|
}
|
|
|
|
public static int wtf(@NonNull String tag, @NonNull Throwable tr) {
|
|
return android.util.Log.wtf(tag, tr);
|
|
}
|
|
|
|
public static int wtf(@NonNull String tag, @NonNull String msg, @NonNull Throwable tr) {
|
|
return android.util.Log.wtf(tag, msg, tr);
|
|
}
|
|
|
|
public static @NonNull String getStackTraceString(@NonNull Throwable tr) {
|
|
return android.util.Log.getStackTraceString(tr);
|
|
}
|
|
|
|
public static int println(int priority, @NonNull String tag, @NonNull String msg) {
|
|
tag = String.valueOf(tag);
|
|
msg = String.valueOf(msg);
|
|
|
|
int color;
|
|
switch (priority) {
|
|
case VERBOSE:
|
|
color = COLOR_CYAN;
|
|
break;
|
|
case DEBUG:
|
|
color = COLOR_BLUE;
|
|
break;
|
|
case INFO:
|
|
color = COLOR_GREEN;
|
|
break;
|
|
case WARN:
|
|
color = COLOR_YELLOW;
|
|
break;
|
|
case ERROR:
|
|
color = COLOR_RED;
|
|
break;
|
|
case ASSERT:
|
|
color = COLOR_MAGENTA;
|
|
break;
|
|
default:
|
|
color = COLOR_BLACK;
|
|
break;
|
|
}
|
|
|
|
int result = 0;
|
|
for (String line : LINE_BREAKER.split(msg)) {
|
|
int length = line.length();
|
|
for (int start = 0; start < length; start += MAX_LINE_LENGTH) {
|
|
String part = line.substring(start, Math.min(start + MAX_LINE_LENGTH, length));
|
|
result += android.util.Log.println(priority, tag, colorize(part, color));
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
private static String colorize(String msg, int color) {
|
|
if (COLORIZE) {
|
|
return String.format(Locale.ROOT, "\033[%2$dm%1$s\033[0m", msg, color);
|
|
}
|
|
return msg;
|
|
}
|
|
}
|