Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

azabost/slf4android

Open more actions menu
 
 

Repository files navigation

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);

About

A simple implementation of slf4j api using android java.util.logging.Logger

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.