MBLog

Project Url: w446108264/MBLog
Introduction: 我估唔到你系噉嘅 Log,支持输入任意类型;支持输出自动格式化 xml,json,url,object;支持输出可跳转的 Log 函数定位信息;支持自定义输出样式.
More: Author   ReportBugs   DemoAPK   
Tags:
log-wellwellwell-估唔到-

j.s 🇨🇳

MBLog,一个神奇的 Log.支持 chrome 输出 Log,支持输入任意类型;支持输出自动格式化 xml,json,url,object;支持输出可跳转的 Log 函数定位信息;支持自定义输出样式

Features

  • API > 9
  • 支持输入任意类型
  • 支持可变参数
  • 支持输出自动格式化 xml,json,url,object
  • 支持自定义格式 Parser
  • 支持输出可跳转的 Log 函数定位信息
  • 支持自定义输出样式

格式化效果

使用

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

        /**
         * 这是非必须的
         * 如果你什么也不做,输出 Log 时默认按如下配置初始化
         */
        L.initPrinter(new MBPrinter())
                // Tag
                .setTag("MBLog")
                // print 输出开关
                .setPrint(L.PRINT.MBLOG)
                // 增加 Parser,MBLog 会依次根据 Parser 增加的顺序识别输入的内容。
                // 内容识别并格式化后即结束
                // 无法识别的内容转换成字符串
                // 支持自定义 Parser 规则样式
                .setParserList(new JsonParser(), new UrlParser(), new ObjectParser());

        /**
         * 支持在程序中动态的改变 print 的设置
         */
        L.setTag("MBLog");
        L.setPrint(L.PRINT.SYSTEM);
        L.setParserList(new JsonParser());
    }
}
        HashMap<String, String> hashMap = new HashMap<>();
        hashMap.put("1", "hashMap1");
        hashMap.put("2", "hashMap2");
        hashMap.put("3", "hashMap3");
        hashMap.put("4", "hashMap4");

        // 示例一次网络 Log
        // URL + JSON
        L.d("NetTest", url, "\n" + json + "\n");

        L.i(2016);

        // 示例 Object 输出
        L.e(doubles, new User("jack", "f"), hashMap, "end");

方法

  • L.d(Object... args);

支持任意 Object,参数间通过换行分割

  • L.e(Object... args);
  • L.e(Throwable throwable, Object... args);
  • L.w(Object... args);
  • L.i(Object... args);
  • L.v(Object... args);
  • L.wtf(Object... args);

其他

自定义输出风格

如果你想要自定义输出风格,可以自定义 Printer,并初始化它

  • L.initPrinter(new MBPrinter())

选择打印模式

你可以动态的改变输出模式

  • L.setPrint(L.PRINT.MBLOG);
 public enum PRINT {
        /**
         * 不打印 Log
         */
        NONE,
        /**
         * 使用系统默认 Log 打印
         */
        SYSTEM,
        /**
         * 使用 MBLog 格式化打印
         */
        MBLOG,
        /**
         * 使用 MBLog 格式化打印,但只打印内容,不打印方法和线程等信息
         */
        MBLOG_NOMETHOD
 }

基于 MBLog 的封装

如果你希望基于 MBLog 额外封装一层 Log,以防止由于第三方库的变化影响项目

  • L.setLastMethodClassName("com.mblog.simple.SimpleLog");
public class SimpleLog {

    /**
     * 假如希望在 MBLog 上封装一层自己的 log
     * 那么你需要额外设置最后一个方法偏移的类名
     */
    static {
        L.setLastMethodClassName("com.mblog.simple.SimpleLog");
    }

    public static void d(Object... args) {
        L.d(args);
    }

    public static void e(Object... args) {
        L.e(args);
    }

    public static void e(Throwable throwable, Object... args) {
        L.e(throwable, args);
    }

    public static void w(Object... args) {
        L.w(args);
    }

    public static void i(Object... args) {
        L.i(args);
    }

    public static void v(Object... args) {
        L.v(args);
    }

    public static void wtf(Object... args) {
        L.wtf(args);
    }
}
   SimpleLog.i("Test","Test","Test");

基于 Stetho 在 chrome 的 console 输出 log

1.引入 stetho

dependencies { 
    debugCompile 'com.facebook.stetho:stetho:1.3.1'
}

2.自定义 MBPrinter

public class SuperMbPrinter extends MBPrinter {

    ConsolePeerManager sPeerManager;

    public SuperMbPrinter() {
        sPeerManager = ConsolePeerManager.getInstanceOrNull();
    }

    protected void print(int priority, String tag, String chunk) {
        super.print(priority, tag, chunk);

        if (sPeerManager == null) {
            sPeerManager = ConsolePeerManager.getInstanceOrNull();
        }

        Console.MessageLevel logLevel;

        switch (priority) {
            case Log.VERBOSE:
            case Log.DEBUG:
                logLevel = Console.MessageLevel.DEBUG;
                break;
            case Log.INFO:
                logLevel = Console.MessageLevel.LOG;
                break;
            case Log.WARN:
                logLevel = Console.MessageLevel.WARNING;
                break;
            case Log.ERROR:
            case Log.ASSERT:
                logLevel = Console.MessageLevel.ERROR;
                break;
            default:
                logLevel = Console.MessageLevel.LOG;
        }

        CLog.writeToConsole(
                logLevel,
                Console.MessageSource.OTHER,
                chunk
        );
    }
}

3.使用 Printer

        /**
         * 支持 chrome 输出 log 调试
         * 建议使用单独的 buildtype, 确保 release 版本不包含 stetho
         */
        Stetho.initialize(Stetho.newInitializerBuilder(this)
              .enableDumpapp(Stetho.defaultDumperPluginsProvider(this))
              .enableWebKitInspector(Stetho.defaultInspectorModulesProvider(this))
              .build());

        L.initPrinter(new SuperMbPrinter());

You can download a sample APK

4.chrome 浏览器输入 chrome://inspect/#devices

5.inspect

6.在 console 获得 log 输出

Gradle Dependency

Users of your library will need add the jitpack.io repository:

allprojects {
    repositories {
        jcenter()
        maven { url "https://jitpack.io" }
    }
}

and:

dependencies { 
    compile 'com.github.w446108264:MBLog:1.0.3'
}

Thanks

Contact & Help

Please fell free to contact me if there is any problem when using the library.

  • email: shengjun8486@gmail.com
Apps
About Me
GitHub: Trinea
Facebook: Dev Tools