diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/Extractor.java b/extractor/src/main/java/org/schabi/newpipe/extractor/Extractor.java
index e973b44167..cc75c8e7ec 100644
--- a/extractor/src/main/java/org/schabi/newpipe/extractor/Extractor.java
+++ b/extractor/src/main/java/org/schabi/newpipe/extractor/Extractor.java
@@ -7,6 +7,7 @@
import org.schabi.newpipe.extractor.localization.ContentCountry;
import org.schabi.newpipe.extractor.localization.Localization;
import org.schabi.newpipe.extractor.localization.TimeAgoParser;
+import org.schabi.newpipe.extractor.utils.ExtractorLogger;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
@@ -15,6 +16,8 @@
import java.util.Objects;
public abstract class Extractor {
+ private final String TAG = getClass().getSimpleName() + "@" + hashCode();
+
/**
* {@link StreamingService} currently related to this extractor.
* Useful for getting other things from a service (like the url handlers for
@@ -54,7 +57,9 @@ public LinkHandler getLinkHandler() {
* @throws ExtractionException if the pages content is not understood
*/
public void fetchPage() throws IOException, ExtractionException {
+ ExtractorLogger.d(TAG, "base fetchPage called");
if (pageFetched) {
+ ExtractorLogger.d(TAG, "Page already fetched");
return;
}
onFetchPage(downloader);
diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/Info.java b/extractor/src/main/java/org/schabi/newpipe/extractor/Info.java
index 78a15553b1..0bcfeb559a 100644
--- a/extractor/src/main/java/org/schabi/newpipe/extractor/Info.java
+++ b/extractor/src/main/java/org/schabi/newpipe/extractor/Info.java
@@ -2,6 +2,7 @@
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import org.schabi.newpipe.extractor.linkhandler.LinkHandler;
+import org.schabi.newpipe.extractor.utils.ExtractorLogger;
import java.io.Serializable;
import java.util.ArrayList;
@@ -10,6 +11,7 @@
public abstract class Info implements Serializable {
+ private static final String TAG = "Info";
private final int serviceId;
/**
* Id of this Info object
@@ -52,6 +54,7 @@ public Info(final int serviceId,
this.url = url;
this.originalUrl = originalUrl;
this.name = name;
+ ExtractorLogger.d(TAG, "Base Created " + this);
}
public Info(final int serviceId, final LinkHandler linkHandler, final String name) {
diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/NewPipe.java b/extractor/src/main/java/org/schabi/newpipe/extractor/NewPipe.java
index 7dfa4c4cde..0fd06872b4 100644
--- a/extractor/src/main/java/org/schabi/newpipe/extractor/NewPipe.java
+++ b/extractor/src/main/java/org/schabi/newpipe/extractor/NewPipe.java
@@ -24,6 +24,7 @@
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import org.schabi.newpipe.extractor.localization.ContentCountry;
import org.schabi.newpipe.extractor.localization.Localization;
+import org.schabi.newpipe.extractor.utils.ExtractorLogger;
import java.util.List;
@@ -34,6 +35,7 @@
* Provides access to streaming services supported by NewPipe.
*/
public final class NewPipe {
+ private static final String TAG = NewPipe.class.getSimpleName();
private static Downloader downloader;
private static Localization preferredLocalization;
private static ContentCountry preferredContentCountry;
@@ -42,15 +44,19 @@ private NewPipe() {
}
public static void init(final Downloader d) {
+ ExtractorLogger.d(TAG, "Default init called");
init(d, Localization.DEFAULT);
}
public static void init(final Downloader d, final Localization l) {
+ ExtractorLogger.d(TAG, "Default init called with localization");
init(d, l, l.getCountryCode().isEmpty()
? ContentCountry.DEFAULT : new ContentCountry(l.getCountryCode()));
}
public static void init(final Downloader d, final Localization l, final ContentCountry c) {
+ ExtractorLogger.d(TAG, "Initializing with downloader: "
+ + d.getClass().getSimpleName() + ", " + l + ", " + c);
downloader = d;
preferredLocalization = l;
preferredContentCountry = c;
diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamInfo.java b/extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamInfo.java
index 62fb6bbf74..f29b5b73a0 100644
--- a/extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamInfo.java
+++ b/extractor/src/main/java/org/schabi/newpipe/extractor/stream/StreamInfo.java
@@ -31,6 +31,7 @@
import org.schabi.newpipe.extractor.exceptions.ExtractionException;
import org.schabi.newpipe.extractor.localization.DateWrapper;
import org.schabi.newpipe.extractor.utils.ExtractorHelper;
+import org.schabi.newpipe.extractor.utils.ExtractorLogger;
import java.io.IOException;
import java.util.List;
@@ -44,7 +45,7 @@
* Info object for opened contents, i.e. the content ready to play.
*/
public class StreamInfo extends Info {
-
+ private static final String TAG = StreamInfo.class.getSimpleName();
public static class StreamExtractException extends ExtractionException {
StreamExtractException(final String message) {
super(message);
@@ -61,19 +62,37 @@ public StreamInfo(final int serviceId,
super(serviceId, id, url, originalUrl, name);
this.streamType = streamType;
this.ageLimit = ageLimit;
+ ExtractorLogger.d(TAG, "Created " + this);
+
+ }
+
+ @Override
+ public String toString() {
+ return TAG + "["
+ + "serviceId=" + getServiceId()
+ + ", url='" + getUrl() + '\''
+ + ", originalUrl='" + getOriginalUrl() + '\''
+ + ", id='" + getId() + '\''
+ + ", name='" + getName() + '\''
+ + ", streamType=" + streamType
+ + ", ageLimit=" + ageLimit
+ + ']';
}
public static StreamInfo getInfo(final String url) throws IOException, ExtractionException {
+ ExtractorLogger.d(TAG, "getInfo(" + url + ")");
return getInfo(NewPipe.getServiceByUrl(url), url);
}
public static StreamInfo getInfo(@Nonnull final StreamingService service,
final String url) throws IOException, ExtractionException {
+ ExtractorLogger.d(TAG, "getInfo(" + service.getClass().getSimpleName() + ", " + url + ")");
return getInfo(service.getStreamExtractor(url));
}
public static StreamInfo getInfo(@Nonnull final StreamExtractor extractor)
throws ExtractionException, IOException {
+ ExtractorLogger.d(TAG, "getInfo(" + extractor.getClass().getSimpleName() + ")");
extractor.fetchPage();
final StreamInfo streamInfo;
try {
diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/utils/ExtractorLogger.java b/extractor/src/main/java/org/schabi/newpipe/extractor/utils/ExtractorLogger.java
new file mode 100644
index 0000000000..6894b6f5c2
--- /dev/null
+++ b/extractor/src/main/java/org/schabi/newpipe/extractor/utils/ExtractorLogger.java
@@ -0,0 +1,87 @@
+package org.schabi.newpipe.extractor.utils;
+
+public final class ExtractorLogger {
+
+ private ExtractorLogger() { }
+
+ private static Logger logger = new EmptyLogger();
+
+ public static void setLogger(final Logger customLogger) {
+ logger = customLogger;
+ }
+
+ public static void d(final String tag, final String msg) {
+ logger.debug(tag, msg);
+ }
+
+ public static void d(final String tag, final String msg, final Throwable t) {
+ logger.debug(tag, msg, t);
+ }
+
+ public static void w(final String tag, final String msg) {
+ logger.warn(tag, msg);
+ }
+
+ public static void w(final String tag, final String msg, final Throwable t) {
+ logger.warn(tag, msg, t);
+ }
+
+ public static void e(final String tag, final String msg) {
+ logger.error(tag, msg);
+ }
+
+ public static void e(final String tag, final String msg, final Throwable t) {
+ logger.error(tag, msg, t);
+ }
+
+
+ private static final class EmptyLogger implements Logger {
+ public void debug(final String tag, final String msg) { }
+
+ @Override
+ public void debug(final String tag, final String msg, final Throwable throwable) { }
+
+ public void warn(final String tag, final String msg) { }
+
+ @Override
+ public void warn(final String tag, final String msg, final Throwable t) { }
+
+ public void error(final String tag, final String msg) { }
+
+ public void error(final String tag, final String msg, final Throwable t) { }
+ }
+
+ /**
+ * Logger that prints to stdout
+ */
+ public static final class ConsoleLogger implements Logger {
+ public void debug(final String tag, final String msg) {
+ System.out.println("[DEBUG][" + tag + "] " + msg);
+ }
+
+ @Override
+ public void debug(final String tag, final String msg, final Throwable throwable) {
+ debug(tag, msg);
+ throwable.printStackTrace(System.err);
+ }
+
+ public void warn(final String tag, final String msg) {
+ System.out.println("[WARN ][" + tag + "] " + msg);
+ }
+
+ @Override
+ public void warn(final String tag, final String msg, final Throwable t) {
+ warn(tag, msg);
+ t.printStackTrace(System.err);
+ }
+
+ public void error(final String tag, final String msg) {
+ System.err.println("[ERROR][" + tag + "] " + msg);
+ }
+
+ public void error(final String tag, final String msg, final Throwable t) {
+ System.err.println("[ERROR][" + tag + "] " + msg);
+ t.printStackTrace(System.err);
+ }
+ }
+}
diff --git a/extractor/src/main/java/org/schabi/newpipe/extractor/utils/Logger.java b/extractor/src/main/java/org/schabi/newpipe/extractor/utils/Logger.java
new file mode 100644
index 0000000000..c7cd9db49c
--- /dev/null
+++ b/extractor/src/main/java/org/schabi/newpipe/extractor/utils/Logger.java
@@ -0,0 +1,10 @@
+package org.schabi.newpipe.extractor.utils;
+
+public interface Logger {
+ void debug(String tag, String message);
+ void debug(String tag, String message, Throwable throwable);
+ void warn(String tag, String message);
+ void warn(String tag, String message, Throwable throwable);
+ void error(String tag, String message);
+ void error(String tag, String message, Throwable t);
+}
diff --git a/extractor/src/test/java/org/schabi/newpipe/extractor/LoggerExtension.java b/extractor/src/test/java/org/schabi/newpipe/extractor/LoggerExtension.java
new file mode 100644
index 0000000000..7ef509cebc
--- /dev/null
+++ b/extractor/src/test/java/org/schabi/newpipe/extractor/LoggerExtension.java
@@ -0,0 +1,16 @@
+package org.schabi.newpipe.extractor;
+
+import org.junit.jupiter.api.extension.BeforeAllCallback;
+import org.junit.jupiter.api.extension.ExtensionContext;
+import org.schabi.newpipe.extractor.utils.ExtractorLogger;
+
+public class LoggerExtension implements BeforeAllCallback {
+ private static boolean set = false;
+
+ @Override
+ public void beforeAll(ExtensionContext context) {
+ if (set) return;
+ set = true;
+ ExtractorLogger.setLogger(new ExtractorLogger.ConsoleLogger());
+ }
+}
\ No newline at end of file
diff --git a/extractor/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension b/extractor/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension
new file mode 100644
index 0000000000..ad03392dbd
--- /dev/null
+++ b/extractor/src/test/resources/META-INF/services/org.junit.jupiter.api.extension.Extension
@@ -0,0 +1 @@
+org.schabi.newpipe.extractor.LoggerExtension
\ No newline at end of file
diff --git a/extractor/src/test/resources/junit-platform.properties b/extractor/src/test/resources/junit-platform.properties
new file mode 100644
index 0000000000..1cebb76d5a
--- /dev/null
+++ b/extractor/src/test/resources/junit-platform.properties
@@ -0,0 +1 @@
+junit.jupiter.extensions.autodetection.enabled = true
\ No newline at end of file