|
|
|
@ -2,6 +2,11 @@ package com.genymobile.scrcpy;
|
|
|
|
|
|
|
|
|
|
import android.util.Log;
|
|
|
|
|
|
|
|
|
|
import java.io.FileDescriptor;
|
|
|
|
|
import java.io.FileOutputStream;
|
|
|
|
|
import java.io.OutputStream;
|
|
|
|
|
import java.io.PrintStream;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Log both to Android logger (so that logs are visible in "adb logcat") and standard output/error (so that they are visible in the terminal
|
|
|
|
|
* directly).
|
|
|
|
@ -11,6 +16,9 @@ public final class Ln {
|
|
|
|
|
private static final String TAG = "scrcpy";
|
|
|
|
|
private static final String PREFIX = "[server] ";
|
|
|
|
|
|
|
|
|
|
private static final PrintStream CONSOLE_OUT = new PrintStream(new FileOutputStream(FileDescriptor.out));
|
|
|
|
|
private static final PrintStream CONSOLE_ERR = new PrintStream(new FileOutputStream(FileDescriptor.err));
|
|
|
|
|
|
|
|
|
|
enum Level {
|
|
|
|
|
VERBOSE, DEBUG, INFO, WARN, ERROR
|
|
|
|
|
}
|
|
|
|
@ -21,6 +29,12 @@ public final class Ln {
|
|
|
|
|
// not instantiable
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void disableSystemStreams() {
|
|
|
|
|
PrintStream nullStream = new PrintStream(new NullOutputStream());
|
|
|
|
|
System.setOut(nullStream);
|
|
|
|
|
System.setErr(nullStream);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Initialize the log level.
|
|
|
|
|
* <p>
|
|
|
|
@ -39,30 +53,30 @@ public final class Ln {
|
|
|
|
|
public static void v(String message) {
|
|
|
|
|
if (isEnabled(Level.VERBOSE)) {
|
|
|
|
|
Log.v(TAG, message);
|
|
|
|
|
System.out.print(PREFIX + "VERBOSE: " + message + '\n');
|
|
|
|
|
CONSOLE_OUT.print(PREFIX + "VERBOSE: " + message + '\n');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void d(String message) {
|
|
|
|
|
if (isEnabled(Level.DEBUG)) {
|
|
|
|
|
Log.d(TAG, message);
|
|
|
|
|
System.out.print(PREFIX + "DEBUG: " + message + '\n');
|
|
|
|
|
CONSOLE_OUT.print(PREFIX + "DEBUG: " + message + '\n');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void i(String message) {
|
|
|
|
|
if (isEnabled(Level.INFO)) {
|
|
|
|
|
Log.i(TAG, message);
|
|
|
|
|
System.out.print(PREFIX + "INFO: " + message + '\n');
|
|
|
|
|
CONSOLE_OUT.print(PREFIX + "INFO: " + message + '\n');
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void w(String message, Throwable throwable) {
|
|
|
|
|
if (isEnabled(Level.WARN)) {
|
|
|
|
|
Log.w(TAG, message, throwable);
|
|
|
|
|
System.err.print(PREFIX + "WARN: " + message + '\n');
|
|
|
|
|
CONSOLE_ERR.print(PREFIX + "WARN: " + message + '\n');
|
|
|
|
|
if (throwable != null) {
|
|
|
|
|
throwable.printStackTrace();
|
|
|
|
|
throwable.printStackTrace(CONSOLE_ERR);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -74,9 +88,9 @@ public final class Ln {
|
|
|
|
|
public static void e(String message, Throwable throwable) {
|
|
|
|
|
if (isEnabled(Level.ERROR)) {
|
|
|
|
|
Log.e(TAG, message, throwable);
|
|
|
|
|
System.err.print(PREFIX + "ERROR: " + message + "\n");
|
|
|
|
|
CONSOLE_ERR.print(PREFIX + "ERROR: " + message + '\n');
|
|
|
|
|
if (throwable != null) {
|
|
|
|
|
throwable.printStackTrace();
|
|
|
|
|
throwable.printStackTrace(CONSOLE_ERR);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
@ -84,4 +98,21 @@ public final class Ln {
|
|
|
|
|
public static void e(String message) {
|
|
|
|
|
e(message, null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static class NullOutputStream extends OutputStream {
|
|
|
|
|
@Override
|
|
|
|
|
public void write(byte[] b) {
|
|
|
|
|
// ignore
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void write(byte[] b, int off, int len) {
|
|
|
|
|
// ignore
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public void write(int b) {
|
|
|
|
|
// ignore
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|