✔️ Simple, pretty and powerful logger for android

Overview

Android Arsenal Join the chat at https://gitter.im/orhanobut/logger Build Status

Logger

Simple, pretty and powerful logger for android

Setup

Download

implementation 'com.orhanobut:logger:2.2.0'

Initialize

Logger.addLogAdapter(new AndroidLogAdapter());

And use

Logger.d("hello");

Output

Options

Logger.d("debug");
Logger.e("error");
Logger.w("warning");
Logger.v("verbose");
Logger.i("information");
Logger.wtf("What a Terrible Failure");

String format arguments are supported

Logger.d("hello %s", "world");

Collections are supported (only available for debug logs)

Logger.d(MAP);
Logger.d(SET);
Logger.d(LIST);
Logger.d(ARRAY);

Json and Xml support (output will be in debug level)

Logger.json(JSON_CONTENT);
Logger.xml(XML_CONTENT);

Advanced

FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder()
  .showThreadInfo(false)  // (Optional) Whether to show thread info or not. Default true
  .methodCount(0)         // (Optional) How many method line to show. Default 2
  .methodOffset(7)        // (Optional) Hides internal method calls up to offset. Default 5
  .logStrategy(customLog) // (Optional) Changes the log strategy to print out. Default LogCat
  .tag("My custom tag")   // (Optional) Global tag for every log. Default PRETTY_LOGGER
  .build();

Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy));

Loggable

Log adapter checks whether the log should be printed or not by checking this function. If you want to disable/hide logs for output, override isLoggable method. true will print the log message, false will ignore it.

Logger.addLogAdapter(new AndroidLogAdapter() {
  @Override public boolean isLoggable(int priority, String tag) {
    return BuildConfig.DEBUG;
  }
});

Save logs to the file

//TODO: More information will be added later

Logger.addLogAdapter(new DiskLogAdapter());

Add custom tag to Csv format strategy

FormatStrategy formatStrategy = CsvFormatStrategy.newBuilder()
  .tag("custom")
  .build();
  
Logger.addLogAdapter(new DiskLogAdapter(formatStrategy));

How it works

More

  • Use filter for a better result. PRETTY_LOGGER or your custom tag
  • Make sure that wrap option is disabled
  • You can also simplify output by changing settings.

  • Timber Integration
// Set methodOffset to 5 in order to hide internal method calls
Timber.plant(new Timber.DebugTree() {
  @Override protected void log(int priority, String tag, String message, Throwable t) {
    Logger.log(priority, tag, message, t);
  }
});

License

Copyright 2018 Orhan Obut

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
Comments
  • Added file logging.

    Added file logging.

    A new LogAdapter class was created to be able to redirect logs to several implementations Made AndroidLogAdapter public so others can easily use it The FileLogger removes the separator lines and creates timestamped CSV logs with several options including:

    • max line lenght (then breaks to new file)
    • internal or external storage
    • different date formats
    • looper (for the IO operation)

    Note. It's the responsibility of the implementing app to request WRITE_STORAGE permission. If no permission is presented the FileLogger will catch silently

    opened by budius 15
  • How to integrate to the Timber?

    How to integrate to the Timber?

    I'm using https://github.com/JakeWharton/timber, then I have a question. The log : RequestListener.onRequestSuccess (RequestListener.java:46) ║ Timber.d (Timber.java:23) ║ Timber$1.d (Timber.java:136) ║ Timber$Tree.d (Timber.java:245) ║ Timber$Tree.prepareLog (Timber.java:319) ║ PrettyDebugTree.log (PrettyDebugTree.java:33)

    How to get rid of : ║ Timber.d (Timber.java:23) ║ Timber$1.d (Timber.java:136) ║ Timber$Tree.d (Timber.java:245) ║ Timber$Tree.prepareLog (Timber.java:319) ║ PrettyDebugTree.log (PrettyDebugTree.java:33)

    I just want : RequestListener.onRequestSuccess (RequestListener.java:46)

    opened by acdsee3003 11
  • Logger.v,Logger.d,Logger.json not work?

    Logger.v,Logger.d,Logger.json not work?

    formatStrategy = PrettyFormatStrategy.newBuilder()
    	.showThreadInfo(true)
    	.methodOffset(2)
    	.methodCount(2)
    	.tag("MyTag")
    	.build();
    Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy));
    
    Logger.v("my v message with MyTag");
    Logger.i("my i message with MyTag");
    Logger.d("my d message with MyTag");
    Logger.w("my log message with my tag");
    

    In the sample project,I add Logger.v , Logger.i and Logger.d, but just Logger.i and Logger.w work.

    version : 'com.orhanobut:logger:2.1.1'

    opened by hacket 9
  • 1.5 does not work

    1.5 does not work

    I updated to 1.5, in our gradle files (since we need the stack-trace crash fix), but it does not recognise the classes from the library.

    Even if I put the .aar locally in the project it does not work.

    1.4 works perfectly, something wrong with the build that were uploaded to mavenCentral?

    bug 
    opened by joezorry 9
  • how to output the ArrayList and HashMap

    how to output the ArrayList and HashMap

    Excuse me, would you please tell me how to use this package, how to output the ArrayList and HashMap, 7683-7683/com.guoyoujin.gz.gz E/AndroidRuntime﹕ FATAL EXCEPTION: main java.util.UnknownFormatConversionException: Conversion: ' at java.util.Formatter$FormatToken.unknownFormatConversionException(Formatter.java:1397) at java.util.Formatter$FormatToken.checkFlags(Formatter.java:1334) at java.util.Formatter.transform(Formatter.java:1440) at java.util.Formatter.doFormat(Formatter.java:1079) at java.util.Formatter.format(Formatter.java:1040) at java.util.Formatter.format(Formatter.java:1009) at java.lang.String.format(String.java:1992) at java.lang.String.format(String.java:1966) at com.orhanobut.logger.LoggerPrinter.createMessage(LoggerPrinter.java:346) at com.orhanobut.logger.LoggerPrinter.log(LoggerPrinter.java:211) at com.orhanobut.logger.LoggerPrinter.i(LoggerPrinter.java:138) at com.orhanobut.logger.Logger.i(Logger.java:61) at com.guoyoujin.gz.gz.fragment.tabfragment.Fragment1$GetNewsDataThread$1.run(Fragment1.java:129) at android.os.Handler.handleCallback(Handler.java:800) at android.os.Handler.dispatchMessage(Handler.java:100) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5463) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:525) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:854) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:621) at dalvik.system.NativeStart.main(Native Method)

    private ArrayList list;

    public class NewsVo { private String newsId; private String title; private String content; private String videoAndriodURL; private String videoIphoneURL; private NewsImageVo image; private String date;

    public String getNewsId() {
        return newsId;
    }
    public void setNewsId(String newsId) {
        this.newsId = newsId;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public String getVideoAndriodURL() {
        return videoAndriodURL;
    }
    public void setVideoAndriodURL(String videoAndriodURL) {
        this.videoAndriodURL = videoAndriodURL;
    }
    public String getVideoIphoneURL() {
        return videoIphoneURL;
    }
    public void setVideoIphoneURL(String videoIphoneURL) {
        this.videoIphoneURL = videoIphoneURL;
    }
    public NewsImageVo getImage() {
        return image;
    }
    public void setImage(NewsImageVo image) {
        this.image = image;
    }
    public String getDate() {
        return date;
    }
    public void setDate(String date) {
        this.date = date;
    }
    
    @Override
    public String toString() {
        return "NewsVo{" +
                "newsId='" + newsId + '\'' +
                ", title='" + title + '\'' +
                ", content='" + content + '\'' +
                ", videoAndriodURL='" + videoAndriodURL + '\'' +
                ", videoIphoneURL='" + videoIphoneURL + '\'' +
                ", image=" + image +
                ", date='" + date + '\'' +
                '}';
    }
    

    }

    opened by guoyoujin 8
  • Proguard

    Proguard

    Hi Orhan,

    I need a proguard config. Without it, cant use library because Logger.init() function throws method not found exception. Can you provide one?

    Thanks Emre

    opened by emreaktrk 6
  • How to output Logger.e to console when running junit test in android studio

    How to output Logger.e to console when running junit test in android studio

    Hi there, The title is pretty obvious. I am be able to print log to console with e.printStackTrace() when running unit test in android studio but Logger.e(JsonUtils.class.getName(), jsonString, e).

    Thanks in advance!

    opened by henrytao-me 6
  • 2 Suggestions: Debug vs Prod and Logger call

    2 Suggestions: Debug vs Prod and Logger call

    Yes, I agree this is a really cool logger. Before I can make the switch I would love to see something like Jake Wharton's Timber's approach: if (BuildConfig.DEBUG) { Timber.plant(new Timber.DebugTree()); } else { Timber.plant(new CrashReportingTree()); }

    The other suggestion is kind of silly, like most of us I am very lazy and typing L.v("test2"); or even Lg.v("test2"); is faster/simpler than typing Logger.v("test2");

    opened by appmath 6
  • Only a log, but print many times(repeated)?

    Only a log, but print many times(repeated)?

    Just like: E/PRETTY_LOGGER: ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────── E/PRETTY_LOGGER: │ Thread: main E/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ E/PRETTY_LOGGER: │ Handler.handleCallback (Handler.java:730) E/PRETTY_LOGGER: │ RecordedActivity$6.run (RecordedActivity.java:310) E/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ E/PRETTY_LOGGER: │ 执行run方法结束! E/PRETTY_LOGGER: └──────────────────────────────────────────────────────────────────────────────────────────────────────────────── E/PRETTY_LOGGER: ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────── E/PRETTY_LOGGER: │ Thread: main E/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ E/PRETTY_LOGGER: │ Handler.handleCallback (Handler.java:730) E/PRETTY_LOGGER: │ RecordedActivity$6.run (RecordedActivity.java:310) E/PRETTY_LOGGER: ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ E/PRETTY_LOGGER: │ 执行run方法结束!

    waiting for reply 
    opened by codeinmyself 5
  • Log cannot be located~~~

    Log cannot be located~~~

    Hi~I met a problem,my log couldn't locate where it happened,that's my setting code,could you tell me why? FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder() .showThreadInfo(false) // (Optional) Whether to show thread info or not. Default true .methodCount(2) // (Optional) How many method line to show. Default 2 .methodOffset(5) // (Optional) Hides internal method calls up to offset. Default 5 .tag("Vissun") // (Optional) Global tag for every log. Default PRETTY_LOGGER .build(); Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy) { @Override public boolean isLoggable(int priority, String tag) { return BuildConfig.DEBUG; } });

    opened by LaymanInCoding 5
  • v1.12 Logger.json cause nullpoint exception but v1.11 is OK

    v1.12 Logger.json cause nullpoint exception but v1.11 is OK

    public void getBonusData() {
            String url = HttpUrl.CLIST;
            Map<String, String> args = new HashMap<>();
            args.put("type", "1");
            HttpRequest httpRequest = new HttpRequest("CLIST_BONUS");
            httpRequest.postRequest(url, args, new HttpResponse() {
                @Override
                public void onSucceedResponse(String response) {
                    Logger.json(response);
                }
    
                @Override
                public void onErrorResponse(VolleyError error) {
                    Logger.t("CLIST_BONUS").d(error.toString());
                }
            });
        }  
    

    12-22 16:05:11.341 12284-12284/com.hangzhuangyuan.employee E/AndroidRuntime: FATAL EXCEPTION: main Process: com.hangzhuangyuan.employee, PID: 12284 java.lang.NullPointerException at com.orhanobut.logger.LoggerPrinter.log(LoggerPrinter.java:204) at com.orhanobut.logger.LoggerPrinter.d(LoggerPrinter.java:110) at com.orhanobut.logger.LoggerPrinter.json(LoggerPrinter.java:160) at com.orhanobut.logger.Logger.json(Logger.java:86) at com.hangzhuangyuan.employee.fragment.BonusFragment$1.onSucceedResponse(BonusFragment.java:52) at com.hangzhuangyuan.employee.network.HttpRequest$1.onResponse(HttpRequest.java:33) at com.hangzhuangyuan.employee.network.HttpRequest$1.onResponse(HttpRequest.java:30) at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:67) at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30) at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5094) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:702) at dalvik.system.NativeStart.main(Native Method)

    bug 
    opened by DeKaiju 5
  • Remove legacy com.android.support:support-annotations and use jetpack version of it

    Remove legacy com.android.support:support-annotations and use jetpack version of it

    Latest version(2.2.0) uses com.android.support:support-annotations dependency, it blocks as to remove jetifier from our project. I checked the source code and seems you already migrated to jetpack version of the library, any chance to publish it sooner?

    opened by hakobast 0
  • Is there any API to get the path of log files

    Is there any API to get the path of log files

    • Android studio version: 4.2.2
    • Android gradle plugin version: 3.5.4
    • Logger version: 2.2.0
    • Emulator/phone information: Huawei Pad

    We upload the log files if the user feedback an issue, so it's required to get the log files at first.

    Anyone knows how to achieve that?

    opened by H-Cheung 0
  • why does it still run while I have already make isLoggable false??

    why does it still run while I have already make isLoggable false??

    I have check it out that Logger is still running while I set isLoggable() false. Function Utils.toString(object) is called.

    I think it's not proper. Coz I usually add some logs in debug mode. But it crashed on production enviroment. And it's out of my control. Also it cost cpu. Sometimes performance is not good.

    opened by AtlantisFaded 0
  • This behavior will not be allowed in Android Gradle plugin 8.0.

    This behavior will not be allowed in Android Gradle plugin 8.0.

    The following warnings appear after importing the com.orhanobut:logger:2.2.0

    Your project has set android.useAndroidX=true, but configuration debugRuntimeClasspath still contains legacy support libraries, which may cause runtime issues. This behavior will not be allowed in Android Gradle plugin 8.0.

    opened by ychxx 0
Releases(2.2.0)
  • 2.2.0(Mar 24, 2018)

    • More documentation are added for public api.
    • Support annotations (NonNull and Nullable) are added for each possible place. This makes it more easier to use in Kotlin.
    • New dependency configurations are used.
    • All dependencies are updated.

    Thanks to @svenjacobs for the contribution.

    Source code(tar.gz)
    Source code(zip)
  • 2.1.1(Jun 6, 2017)

  • 2.1.0(May 28, 2017)

    • Line decoration is changed to single line instead of double. Way more compact now.
    screen shot 2017-05-29 at 00 04 48
    • Logger.d(null) or Logger.d(new int[]{1,3,5}) crashes are fixed. Logger.d(object) accept anything now and doesn't crash.
    Source code(tar.gz)
    Source code(zip)
  • 2.0.0(May 27, 2017)

    • LogAdapter functionality is changed. Log adapter decides when to log with isLoggable and how to log with format strategy. You can create your custom adapter and add to Logger. Logger now accepts multiple log adapters.

    • Initialization changed. Old style is not supported any longer. Use the following style with log adapters. This approach allows you to add multiple adapters and each adapter contains different logic.

    Logger.addLogAdapter(new AndroidLogAdapter());
    
    • FormatStrategy added. With format strategy, you can have different output format such as normal pretty look or csv. You can also add your custom format.

    • Settings is removed. Format settings are associated with format strategy. Use the built-in functions to change the appearance or behavior.

    FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder()
      .showThreadInfo(false)  // (Optional) Whether to show thread info or not. Default true
      .methodCount(0)         // (Optional) How many method line to show. Default 2
      .methodOffset(7)        // (Optional) Hides internal method calls up to offset. Default 5
      .logStrategy(customLog) // (Optional) Changes the log strategy to print out. Default LogCat
      .tag("My custom tag")   // (Optional) Custom tag for each log. Default PRETTY_LOGGER
      .build();
    
    Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy));
    
    • LogStrategy added. Log stratey decides what to do with the input, for example: print out to logcat or save it to file. You can create your custom log strategy as well.

    • LogLevel removed. There are many different ways when it comes to what to log and when to log. Therefore decision is now up to the developer. Log adapters contain isLoggable function. Simply override it and put your log condition.

    Logger.addLogAdapter(new AndroidLogAdapter(){
      @Override public boolean isLoggable(int priority, String tag) {
        return BuildConfig.DEBUG;
      }
    });
    
    • DiskLogAdapter added. Save output to file, CSV format is supported.
    Logger.addLogAdapter(new DiskLogAdapter());
    
    • Divider's width is increased. Visual appearance change.

    • For more details about the new structure, check the diagram how it works.

    Source code(tar.gz)
    Source code(zip)
  • 1.12(Oct 6, 2015)

  • v11(Aug 2, 2015)

  • v1.10(May 30, 2015)

    Method count stack offset feature added. With this feature you can integrate the logger easily with other libraries.

    Logger.init()
        .setMethodOffset(5);
    
    Source code(tar.gz)
    Source code(zip)
  • v1.9(May 25, 2015)

  • v1.8-release(Apr 13, 2015)

  • v1.7-release(Apr 13, 2015)

  • v1.6-release(Apr 12, 2015)

  • v1.5-release(Apr 9, 2015)

    • Major structural changes
    • Logger.e(Exception) is removed
    • Varargs for String format added
    void d(String message, Object... args)
    
    • methodcount and tag is moved from constructor to another method t
    Logger.t(TAG).d("message");
    Logger.t(METHOD_COUNT).d("message");
    Logger.t(TAG, METHOD_COUNT).d("message");
    
    • Logger.xml added for pretty xml
    • index out of array bounds bug fix
    Source code(tar.gz)
    Source code(zip)
  • v1.4(Mar 28, 2015)

  • v1.3(Mar 23, 2015)

  • v1.1(Mar 21, 2015)

Owner
Orhan Obut
Architect | ex Android GDE
Orhan Obut
Utility logger library for storing logs into database and push them to remote server for debugging

HyperLog Android Overview Log format Download Initialize Usage Get Logs in a File Push Logs Files to Remote Server Sample Testing Endpoint using Reque

HyperTrack 675 Nov 14, 2022
Timber + Logger Integration. Make Logcat Prettier, show thread information and more.

Pretty Timber Android Logcat Timber + Logger Integration Video Instructions: https://youtu.be/zoS_i8VshCk Code App.kt class App : Application() {

Awesome Dev Notes | Android Dev Notes YouTube 29 Jun 6, 2022
Pluto Logger is a Pluto plugin to manage and share your Debug logs

Pluto Logger Plugin Pluto Logger is a Pluto plugin to manage and share your Debug logs. It also comes with Timber support. ?? Integrate plugin in your

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

This is a logger with a small, extensible API which provides utility on top of Android's normal Log class. I copy this class into all the little apps

Jake Wharton 9.9k Jan 8, 2023
Kotlin Multi Platform Logger, for android an ios : Logcat & print

Multiplatform Preferences Use a single object : Logger in your kotlin shared projects to display logs Note you can also use it in your real code on An

Florent CHAMPIGNY 49 Aug 22, 2022
Logger

StreamingAndroidLogger Introduction Convenient logger that adds support to having multiple different loggers and different log levels for each one of

Jan Rabe 46 Nov 29, 2022
Napier is a logger library for Kotlin Multiplatform.

Napier is a logger library for Kotlin Multiplatform. It supports for the android, ios, jvm, js. Logs written in common module are displayed on logger

Akira Aratani 457 Jan 7, 2023
Yakl - Yet Another Kotlin Logger

YAKL Yet Another Kotlin Logger. Motivation Current jvm loggers have some disadva

Mark Kosichkin 4 Jan 19, 2022
Simple application to log your mood through the day and explain feature flags.

Mood Logger App (Android version) This Repo This repository contains code for building a very basic application to log your mood through the days. The

MongoDB Developer Relations 3 Oct 24, 2021
simple Kotlin logging: colorized logs for Kotlin on the JVM

sklog - simple Kotlin logging Kotlin (JVM) logging library for printing colorized text to the console, with an easy upgrade path to the popular kotlin

null 1 Jul 26, 2022
📄The reliable, generic, fast and flexible logging framework for Android

logback-android v2.0.0 Overview logback-android brings the power of logback to Android. This library provides a highly configurable logging framework

Tony Trinh 1.1k Jan 5, 2023
An easy way to customize your log in Android,including output to console, writing log to file in high performance way and so on

EasyLog An easy way to customize your log in Android,including output to console, writing log to file in high performance way and so on. 1. Initializa

Taylor 40 Dec 8, 2022
Library that makes debugging, log collection, filtering and analysis easier.

AndroidLogger Android Library that makes debugging, log collection, filtering and analysis easier. Contains 2 modules: Logger: 'com.github.ShiftHackZ.

ShiftHackZ 2 Jul 13, 2022
Kotlin multi-platform logging library with structured logging and coroutines support

Klogging Klogging is a pure-Kotlin logging library that aims to be flexible and easy to use. It uses Kotlin idioms for creating loggers and sending lo

Klogging 51 Dec 20, 2022
Example application using Bugfender SDK in Android

Bugfender Android SDK SDK Installation Here are the main points to getting Bugfender working on your apps: Get an app key at bugfender.com Add Bugfend

Bugfender 37 Dec 7, 2022
Gadget is a library that makes analytics tracking easier for android apps

gadget (In RC Stage) Gadget is a library that makes analytics tracking easier for android apps.

Taylan Sabırcan 54 Nov 29, 2022
An in-display logging library for Android 📲

Vlog provides an easy and convenient way to access logs right on your phone.

girish budhwani 121 Dec 26, 2022
A tiny Kotlin API for cheap logging on top of Android's normal Log class.

A tiny Kotlin API for cheap logging on top of Android's normal Log class.

Square 849 Dec 23, 2022
FileLogger - a library for saving logs on Files with custom-formatter on background I/O threads, mobile-ready, android compatible,

The FileLogger is a library for saving logs on Files with custom-formatter on background I/O threads, mobile-ready, android compatible, powered by Java Time library for Android.

Abolfazl Abbasi 12 Aug 23, 2022