✔️ 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
Android processing and secured library for managing SharedPreferences as key-value elements efficiently and structurally.

Memo Android processing and secured library for managing SharedPreferences as key-value elements efficiently and structurally. 1. Depend on our librar

ZeoFlow 18 Jun 30, 2022
Screaming fast JSON parsing and serialization library for Android.

#LoganSquare The fastest JSON parsing and serializing library available for Android. Based on Jackson's streaming API, LoganSquare is able to consiste

BlueLine Labs 3.2k Dec 18, 2022
100% Java, Lambda Enabled, Lightweight Rules Engine with a Simple and Intuitive DSL

RuleBook » A Simple & Intuitive Rules Abstraction for Java 100% Java · Lambda Enabled · Simple, Intuitive DSL · Lightweight Why RuleBook? RuleBook rul

Delivered Technologies Labs 666 Dec 21, 2022
null 5 Jan 11, 2022
Bu repositorie Google'ın tamamıyla ücretsiz olarak sunduğu Android Kotlin Fundamentals içeriğindeki projelerin tamamıdır.

Bu repositorie Google'ın tamamıyla ücretsiz olarak sunduğu Android Kotlin Fundamentals içeriğindeki projelerin tamamıdır. Kotlin ile Android geliştiriciliğine başlayacaklara önerilir.

Serkan Alc 15 Dec 2, 2022
A declarative API to handle Android runtime permissions.

PermissionsDispatcher Fully Kotlin/Java support Special permissions support 100% reflection-free PermissionsDispatcher provides a simple annotation-ba

PermissionsDispatcher 11.1k Jan 5, 2023
a simple rating component

rn-rating-component A Simple react-native rating component. Installation Install rn-rating-component and its dependeices with npm npm install --save

Yuva raghav 3 Aug 20, 2021
Simple, efficient Excel to POJO library for Java

ZeroCell ZeroCell provides a simple API for loading data from Excel sheets into Plain Old Java Objects (POJOs) using annotations to map columns from a

Credit Data CRB 68 Dec 8, 2022
Simple LaTeX filter for OmegaT

Simple LaTeX filter plugin for OmegaT What is it? This plugin implements a subset of LaTeX syntax as OmegaT file filter. Translated content is expecte

Lev Abashkin 4 May 24, 2022
A simple java JSON deserializer that can convert a JSON into a java object in an easy way

JSavON A simple java JSON deserializer that can convert a JSON into a java object in an easy way. This library also provide a strong object convertion

null 0 Mar 18, 2022
A simple java json configuration system built with gson.

Simple Configuration A simple json configuration system built with gson. Setup ?? Using Maven REPOSITORY <repositories> <repository> <id>j

Kacper Horbacz 2 Sep 24, 2022
A simple JAVA HTTP requests tool.

JAVA-HTTP Hello ?? I made this very simple tool to start studying HTTP requests in JAVA. You need JAVA 18 to be able to test it: Download JAVA Functio

Ghost 9 Oct 16, 2022
A JSON Transmission Protocol and an ORM Library for automatically providing APIs and Docs.

?? 零代码、热更新、全自动 ORM 库,后端接口和文档零代码,前端(客户端) 定制返回 JSON 的数据和结构。 ?? A JSON Transmission Protocol and an ORM Library for automatically providing APIs and Docs.

Tencent 14.4k Dec 31, 2022
Weld, including integrations for Servlet containers and Java SE, examples and documentation

Weld Weld is the reference implementation of CDI: Contexts and Dependency Injection for the Java EE Platform which is the Java standard for dependency

Weld 345 Oct 28, 2022
A Java serialization/deserialization library to convert Java Objects into JSON and back

Gson Gson is a Java library that can be used to convert Java Objects into their JSON representation. It can also be used to convert a JSON string to a

Google 21.7k Jan 8, 2023
Set of support modules for Java 8 datatypes (Optionals, date/time) and features (parameter names)

Overview This is a multi-module umbrella project for Jackson modules needed to support Java 8 features, especially with Jackson 2.x that only requires

FasterXML, LLC 372 Dec 23, 2022
A modern JSON library for Kotlin and Java.

Moshi Moshi is a modern JSON library for Android and Java. It makes it easy to parse JSON into Java objects: String json = ...; Moshi moshi = new Mos

Square 8.7k Dec 31, 2022
JSON query and transformation language

JSLT JSLT is a complete query and transformation language for JSON. The language design is inspired by jq, XPath, and XQuery. JSLT can be used as: a q

Schibsted Media Group 510 Dec 30, 2022
Generate Java types from JSON or JSON Schema and annotates those types for data-binding with Jackson, Gson, etc

jsonschema2pojo jsonschema2pojo generates Java types from JSON Schema (or example JSON) and can annotate those types for data-binding with Jackson 2.x

Joe Littlejohn 5.9k Jan 5, 2023