Logging

PSPDFKit for Android logs important debugging information via the PdfLog API. PdfLog allows you to log messages in your app and inject your own loggers to implement a custom logging policy. The default logger logs messages with a priority of INFO and higher to the system Logcat.

Custom Loggers

PdfLog manages a list of loggers that handle log filtering and log output. All logged messages are delegated to these loggers in the order of their registration.

A list of loggers can be managed with the static methods defined in PdfLog. You can add your own loggers with the addLogger() method, remove existing loggers with removeLogger(), or replace existing loggers with setLoggers(). Note that it’s best to add your custom loggers early on to catch all logs.

Filtering Logs

Logs can be filtered based on their priority (VERBOSE, DEBUG, INFO, WARN, ERROR, and ASSERT) and tag. To do this, override the default interface method, Logger#isLogged(), in your custom loggers:

Copy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class CustomLogger : PdfLog.Logger {

    override fun isLogged(@PdfLog.LogPriority priority: Int, tag: String): Boolean {
        // This method is called for each log message.
        // Return true for logs that should be logged, and return false for logs that should be ignored.
        // If you return false, the log() method below won't be called for this log message.
        return priority >= Log.INFO;
    }

    override fun log(@PdfLog.LogPriority priority: Int, tag: String, message: String, throwable: Throwable?) {
        // Implement your custom logging here.
        ...
    }
}
Copy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class CustomLogger implements PdfLog.Logger {

    @Override
    public boolean isLogged(int priority, @NonNull String tag) {
        // This method is called for each log message.
        // Return true for logs that should be logged, and return false for logs that should be ignored.
        // If you return false, the log() method below won't be called for this log message.
        return priority >= Log.INFO;
    }

    @Override
    public void log(@PdfLog.LogPriority int priority, @NonNull String tag, @NonNull String message, @Nullable Throwable throwable) {
        // Implement your custom logging here.
        ...
    }
}

Custom Logging

Each Logger must implement its log() method to output log messages to the destination of their choice — for example, Logcat, a text file, a database, or a third-party logging library.

Disabling Logging

Logging can be easily disabled by removing all registered loggers via PdfLog#removeAllLoggers():

1
PdfLog.removeAllLoggers()
1
PdfLog.removeAllLoggers();

ProGuard

We strongly recommend stripping all log statements from your release application by using the following ProGuard rules:

Copy
proguard-rules.pro
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# Remove all Android logging calls that should be ignored in release builds to prevent logs in Logcat.
-assumenosideeffects class android.util.Log {
    public static int v(...);
    public static int d(...);
    public static int i(...);
    public static int w(...);
    public static int e(...);
}

# Remove all PSPDFKit logging calls that should be ignored in release builds.
-assumenosideeffects class com.pspdfkit.utils.PdfLog {
    public static void d(...);
    public static void v(...);
    public static void i(...);
    public static void w(...);
    public static void e(...);
}