MCPcopy Index your code
hub / github.com/bright/slf4android

github.com/bright/slf4android @0.1.8

Chat with this repo
repository ↗ · DeepWiki ↗ · release 0.1.8 ↗ · + Follow
252 symbols 667 edges 42 files 12 documented · 5% updated 1y ago★ 616 open issues
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

slf4android

A simple implementation of SLF4J API using Android java.util.logging.*. This means you can easily hook in any existing java.util.logging.Handler implementations.

To use this little gem, make sure you have Maven Central in your repositories:

repositories {
    mavenCentral()
}

and then declare a dependency inside a module:

dependencies {
    // just SLF4J binding
    implementation("dev.bright.slf4android:slf4android:$slf4androidVersion")

    // (optional) a handler for file logging 
    implementation("dev.bright.slf4android:handler-file-log:$slf4androidVersion")

    // (optional) a handler for notifying the developer in case of an error 
    implementation("dev.bright.slf4android:handler-notify-developer:$slf4androidVersion")
}

As with any slf4j compatible implementation using slf4android looks like this:

class HomeActivity extends Activity {
    private static final Logger LOG = LoggerFactory.getLogger(HomeActivity.class.getSimpleName());

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        LOG.debug("Hello from {} saved instance state {}", this, savedInstanceState);
    }
}

Logging to Crashlytics

Crashlytics has a nice feature of attaching log entries that were issued just before a crash. With slf4android it's easy to add a handler so that whenever a crash happens you get more insight as to what happened just before it.

To achieve that you need a custom handler:

import com.crashlytics.android.Crashlytics;
import java.util.logging.Handler;
import pl.brightinventions.slf4android.LogRecord;
import pl.brightinventions.slf4android.MessageValueSupplier;

public class CrashlyticsLoggerHandler extends Handler {
    MessageValueSupplier messageValueSupplier = new MessageValueSupplier();

    @Override
    public void publish(java.util.logging.LogRecord record) {
        LogRecord logRecord = LogRecord.fromRecord(record);
        StringBuilder messageBuilder = new StringBuilder();
        messageValueSupplier.append(logRecord, messageBuilder);
        String tag = record.getLoggerName();
        int androidLogLevel = logRecord.getLogLevel().getAndroidLevel();
        Crashlytics.log(androidLogLevel, tag, messageBuilder.toString());
    }

    @Override
    public void close() {
    }

    @Override
    public void flush() {
    }
}

That is added to root logger:

LoggerConfiguration.configuration()
        .removeRootLogcatHandler()
        .addHandlerToRootLogger(new CrashlyticsLoggerHandler());

Note that we remove a default logcat handler since Crashlytics will push messages to logcat too.

Logging to a file

To print messages to a separate file just add:

FileLogHandlerConfiguration fileHandler = FileLogHandlerConfiguration.create(this);
LoggerConfiguration.configuration().addHandlerToRootLogger(fileHandler);
String logFileName = fileHandler.getCurrentFileName();
// logFileName contains full path to logged file

inside your custom android.app.Application onCreate method. This will create rotated log files inside context.getApplicationInfo().dataDir with a name derived from context.getPackageName() and a default message pattern %date %level [%thread] %name - %message%newline

To change the location of log file you can use:

FileLogHandlerConfiguration fileHandler = FileLogHandlerConfiguration.create(this);

fileHandler.setFullFilePathPattern("/sdcard/your.package/my_log.%g.%u.log");

LoggerConfiguration.configuration().addHandlerToRootLogger(fileHandler);

Extension points exported contracts — how you extend this code

LoggerPatternValueSupplier (Interface)
(no doc) [14 implementers]
core/src/main/java/pl/brightinventions/slf4android/LoggerPatternValueSupplier.java
LogRecordFormatter (Interface)
(no doc) [3 implementers]
core/src/main/java/pl/brightinventions/slf4android/LogRecordFormatter.java

Core symbols most depended-on inside this repo

print
called by 50
core/src/main/java/pl/brightinventions/slf4android/AndroidLoggerAdapter.java
warn
called by 24
core/src/main/java/pl/brightinventions/slf4android/AndroidLoggerAdapter.java
getLogger
called by 14
core/src/main/java/pl/brightinventions/slf4android/AndroidLoggerFactory.java
add
called by 12
core/src/main/java/pl/brightinventions/slf4android/ListLogRecordFormatter.java
ensureInitialized
called by 11
handler-file-log/src/main/java/pl/brightinventions/slf4android/handler/filelog/FileLogHandler.java
append
called by 10
core/src/main/java/pl/brightinventions/slf4android/LoggerPatternValueSupplier.java
error
called by 9
core/src/main/java/pl/brightinventions/slf4android/AndroidLoggerAdapter.java
format
called by 8
core/src/main/java/pl/brightinventions/slf4android/LogRecordFormatter.java

Shape

Method 208
Class 40
Interface 3
Enum 1

Languages

Java100%

Modules by API surface

handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/NotifyDeveloperHandler.java23 symbols
core/src/main/java/pl/brightinventions/slf4android/LoggerConfiguration.java22 symbols
handler-file-log/src/main/java/pl/brightinventions/slf4android/handler/filelog/FileLogHandler.java21 symbols
core/src/androidTest/java/pl/brightinventions/slf4android/LoggerAdapterTests.java17 symbols
handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/NotifyDeveloperDialogDisplayActivity.java15 symbols
core/src/main/java/pl/brightinventions/slf4android/AndroidLoggerAdapter.java15 symbols
handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/ActivityStateListener.java11 symbols
handler-file-log/src/androidTest/java/pl/brightinventions/slf4android/handler/filelog/FileHandlerTests.java9 symbols
handler-notify-developer/src/main/java/pl/brightinventions/slf4android/handler/notifydeveloper/EmailErrorReport.java8 symbols
core/src/test/java/pl/brightinventions/slf4android/MessageValueSupplierTests.java8 symbols
core/src/main/java/pl/brightinventions/slf4android/LogRecord.java7 symbols
handler-file-log/src/main/java/pl/brightinventions/slf4android/handler/filelog/FileLogHandlerConfiguration.java6 symbols

For agents

$ claude mcp add slf4android \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact