Convert Figma logo to code with AI

tony19 logologback-android

📄The reliable, generic, fast and flexible logging framework for Android

1,265
185
1,265
11

Top Related Projects

3,237

The reliable, generic, fast and flexible logging framework for Java.

10,852

A logger with a small, extensible API which provides utility on top of Android's normal Log class.

1,478

A Fluent Logging API for Java

Quick Overview

Logback-android is a reliable and flexible logging framework for Android applications. It is a port of the popular Logback project, adapted specifically for use in Android environments, providing developers with powerful logging capabilities and configuration options.

Pros

  • Highly configurable and flexible logging system
  • Supports various output destinations (console, file, database)
  • Compatible with SLF4J (Simple Logging Facade for Java)
  • Offers better performance compared to other Android logging solutions

Cons

  • Adds additional size to the application package
  • May require a learning curve for developers unfamiliar with Logback
  • Some advanced features might be overkill for simple logging needs
  • Occasional compatibility issues with certain Android versions or devices

Code Examples

  1. Basic logging:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyActivity extends Activity {
    private static final Logger logger = LoggerFactory.getLogger(MyActivity.class);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        logger.info("Activity created");
    }
}
  1. Logging with parameters:
String username = "John";
int age = 30;
logger.debug("User {} is {} years old", username, age);
  1. Using different log levels:
logger.trace("This is a TRACE message");
logger.debug("This is a DEBUG message");
logger.info("This is an INFO message");
logger.warn("This is a WARN message");
logger.error("This is an ERROR message");

Getting Started

  1. Add the following dependencies to your build.gradle file:
dependencies {
    implementation 'com.github.tony19:logback-android:2.0.0'
    implementation 'org.slf4j:slf4j-api:1.7.30'
}
  1. Create a logback.xml file in the src/main/assets directory:
<configuration>
    <appender name="logcat" class="ch.qos.logback.classic.android.LogcatAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <root level="DEBUG">
        <appender-ref ref="logcat" />
    </root>
</configuration>
  1. Start using the logger in your code as shown in the examples above.

Competitor Comparisons

3,237

The reliable, generic, fast and flexible logging framework for Java.

Pros of Logback

  • More active development and frequent updates
  • Broader community support and extensive documentation
  • Native support for various Java environments beyond Android

Cons of Logback

  • Larger library size, potentially impacting app size on Android
  • Not specifically optimized for Android, may have unnecessary features

Code Comparison

Logback configuration (logback.xml):

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>
  <root level="debug">
    <appender-ref ref="STDOUT" />
  </root>
</configuration>

Logback-android configuration (logback.xml):

<configuration>
  <appender name="logcat" class="ch.qos.logback.classic.android.LogcatAppender">
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>
  <root level="debug">
    <appender-ref ref="logcat" />
  </root>
</configuration>

The main difference is the use of LogcatAppender in Logback-android, which is specifically designed for Android's logcat system.

10,852

A logger with a small, extensible API which provides utility on top of Android's normal Log class.

Pros of Timber

  • Lightweight and simple to use, with minimal setup required
  • Provides automatic tagging of log messages
  • Supports custom log adapters for flexibility

Cons of Timber

  • Less feature-rich compared to Logback-Android
  • Lacks built-in support for advanced logging features like rolling file appenders
  • No direct support for configuration files

Code Comparison

Timber:

Timber.d("Debug message")
Timber.e(exception, "Error message")

Logback-Android:

logger.debug("Debug message")
logger.error("Error message", exception)

Additional Notes

Timber is designed for simplicity and ease of use, making it a popular choice for smaller projects or those requiring basic logging functionality. Logback-Android, on the other hand, offers more advanced features and configuration options, making it suitable for larger, more complex applications that require extensive logging capabilities.

While Timber provides a streamlined API, Logback-Android offers greater flexibility in terms of log formatting, output destinations, and runtime configuration. However, this comes at the cost of increased complexity and setup time.

Ultimately, the choice between Timber and Logback-Android depends on the specific requirements of your project and the level of logging functionality needed.

1,478

A Fluent Logging API for Java

Pros of Flogger

  • Designed for high-performance logging with minimal overhead
  • Supports fluent API for easier and more readable log statements
  • Offers extensive customization options for log formatting and output

Cons of Flogger

  • Primarily focused on Java, with limited Android-specific features
  • Requires more setup and configuration compared to Logback-Android
  • Less established in the Android ecosystem

Code Comparison

Logback-Android:

Logger logger = LoggerFactory.getLogger(MyClass.class);
logger.debug("Debug message");
logger.info("Info message with {}", parameter);

Flogger:

private static final FluentLogger logger = FluentLogger.forEnclosingClass();
logger.atDebug().log("Debug message");
logger.atInfo().with("parameter", value).log("Info message with %s", parameter);

Key Differences

  • Logback-Android is specifically tailored for Android, while Flogger is more general-purpose
  • Flogger uses a fluent API, which can lead to more expressive and readable logging statements
  • Logback-Android follows the SLF4J API, making it easier to integrate with existing projects using this logging facade

Use Cases

  • Choose Logback-Android for Android-specific projects requiring easy setup and SLF4J compatibility
  • Opt for Flogger in performance-critical applications or when a more flexible and customizable logging solution is needed

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

logback-android GitHub release API Build CodeQL

Overview

logback-android is a lite version of logback that runs on Android. This library provides a highly configurable logging framework for Android apps, supporting multiple log destinations simultaneously:

  • files
  • SQLite databases
  • logcat
  • sockets
  • syslog
  • email

See Wiki for documentation.

For logback-android@1.x, see the 1.x branch.

JDK-specific builds

logback-android is published as JDK-specific artifacts instead of a single lowest-common-denominator build:

ArtifactBytecodeminSdk
com.github.tony19:logback-androidJava 1126 (Android 8.0)
com.github.tony19:logback-android-jdk8Java 821 (Android 5.0)

Use logback-android unless your app must support devices older than Android 8.0, in which case use logback-android-jdk8.

Quick Start

  1. Create a new "Basic Activity" app in Android Studio.

  2. In app/build.gradle, add the following dependencies:

    dependencies {
      implementation 'org.slf4j:slf4j-api:2.0.7'
      implementation 'com.github.tony19:logback-android:3.0.0'
    }
    

    If using logback-android in unit tests, either use Robolectric, or use this config instead:

    dependencies {
      implementation 'org.slf4j:slf4j-api:2.0.7'
      implementation 'com.github.tony19:logback-android:3.0.0'
      testImplementation 'ch.qos.logback:logback-classic:1.2.11'
    }
    
    configurations.testImplementation {
      exclude module: 'logback-android'
    }
    
  3. Create app/src/main/assets/logback.xml containing:

    <configuration
      xmlns="https://tony19.github.io/logback-android/xml"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="https://tony19.github.io/logback-android/xml https://cdn.jsdelivr.net/gh/tony19/logback-android/logback.xsd"
    >
      <appender name="logcat" class="ch.qos.logback.classic.android.LogcatAppender">
        <tagEncoder>
          <pattern>%logger{12}</pattern>
        </tagEncoder>
        <encoder>
          <pattern>[%-20thread] %msg</pattern>
        </encoder>
      </appender>
    
      <root level="DEBUG">
        <appender-ref ref="logcat" />
      </root>
    </configuration>
    
  4. In MainActivity.java, add the following imports:

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
  5. ...and modify onOptionsItemSelected() to log "hello world":

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        Logger log = LoggerFactory.getLogger(MainActivity.class);
        log.info("hello world");
        // ...
    }
    
  6. Build and start the app.

  7. Open logcat for your device (via the Android Monitor tab in Android Studio).

  8. Click the app menu, and select the menu-option. You should see "hello world" in logcat.

Providing Android context externally

In order to support various special properties the code requires access to an Android Context instance. By default, the framework uses a workaround based on reflection that seems to work for the time being. However, in view of Google's restrictions on non-SDK interfaces this code might not work anymore. Therefore, the framework provides a special API that enables the application to provide an Android context instance that will be used instead of the workaround. Note: the context instance must be provided before it is needed by the framework, so the best place for it would be in the application's onCreate callback:

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        // Assuming no logging occurs before this
        AndroidContextUtil.setApplicationContext(this);
    }
}

If an earlier initialization is required, then one might consider overriding attachBaseContext, although at this stage the context instance might not be fully initialized. This might be good enough though if by the time the context is used by the framework it becomes fully initialized.

public class MyApplication extends Application {

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        AndroidContextUtil.setApplicationContext(base);
    }
}

Note: despite the fact that the method is called setApplicationContext - the user may use any ContextWrapper component (Application, Activity, Service) - the framework will actually use the "pure" application context.

Download

Gradle release

dependencies {
  implementation 'org.slf4j:slf4j-api:2.0.7'
  implementation 'com.github.tony19:logback-android:3.0.0'
}

Gradle snapshot (unstable)

repositories {
  maven { url 'https://oss.sonatype.org/content/repositories/snapshots' }
}

dependencies {
  implementation 'org.slf4j:slf4j-api:2.0.7'
  implementation 'com.github.tony19:logback-android:3.0.1-SNAPSHOT'
}

Build

Use these commands to create the AAR:

git clone git://github.com/tony19/logback-android.git
cd logback-android
scripts/makejar.sh

The file is output to:

./build/logback-android-3.0.0-debug.aar

Release

  1. Make sure local.properties contains the following keys, required to sign artifacts and upload to Maven Central:

    # output from `gpg --export-secret-keys <PUBKEY_LAST8> | base64`
    signing.key=
    # PUBKEY_LAST8 from `gpg --list-keys` (last 8 digits of pub key)
    signing.keyId=
    # password for key (can be empty if key has no password)
    signing.password=
    # path to secring.gpg file from `gpg --keyring secring.gpg --export-secret-keys > ~/.gnupg/secring.gpg`
    signing.secretKeyRingFile=/Users/tony/.gnupg/secring.gpg
    # OSS sonatype username at https://issues.sonatype.org
    ossrhUsername=
    # OSS sonatype password at https://issues.sonatype.org
    ossrhPassword=
    # profile ID from https://oss.sonatype.org/#stagingProfiles (select profile, and copy profile ID from hash in address bar)
    sonatypeStagingProfileId=b2413418ab44f
    
  2. Set the release version in gradle.properties (drop the -SNAPSHOT suffix).

  3. Build, sign, and upload to a Sonatype staging repository:

    ./gradlew publishToSonatype closeAndReleaseSonatypeStagingRepository
    
  4. Tag the release and bump gradle.properties back to the next -SNAPSHOT version.

  5. Confirm the artifacts were uploaded in https://repo1.maven.org/maven2/com/github/tony19/logback-android/3.0.0/.