Android开源日志库Logger的使用,日志重复打印无法对齐问题。

曾无好事来相访,赖尔高文一起予。这篇文章主要讲述Android开源日志库Logger的使用,日志重复打印无法对齐问题。相关的知识,希望能为你提供帮助。
基于  com.orhanobut:logger:2.2.0
Logger的GitHub地址:https://github.com/orhanobut/logger
1.添加依赖

implementation ‘com.orhanobut:logger:2.2.0‘

2.初始化
Logger.addLogAdapter(new androidLogAdapter());

或者
FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder() .showThreadInfo(true)// (可选) 是否显示线程信息。Default:true .methodCount(1)// (可选) 显示的方法数量。Default:2 .methodOffset(0)// (可选) 隐藏的方法数量,若设为 1,则隐藏跳转到日志输出的方法。Default:0 //.logStrategy(customLog)// (可选) 更改日志策略以打印输出。Default:new LogcatLogStrategy()。AS3.0会出现日志无法对齐的问题,下文有解决方法。 //.tag("My custom tag")// (可选) 每个日志的全局标记. Default:PRETTY_LOGGER .build(); Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy){ // 日志适配器通过检查此函数来检查日志是否应该打印。如果要禁用/隐藏输出日志,请重写isLoggable方法。true将打印日志消息,false会忽略它。 @Override public boolean isLoggable(int priority, String tag) { return BuildConfig.DEBUG; } });

注意:应放到application中初始化。为了保证仅初始化一次LogAdapter,一个LogAdapter便不会重复输出日志。分析源码得:
LogAdapter在集合中,每次初始化都会向集合中添加LogAdapter
public final class Logger { public static void addLogAdapter(@NonNull LogAdapter adapter) { printer.addAdapter(checkNotNull(adapter)); } }public interface Printer { void addAdapter(@NonNull LogAdapter adapter); }class LoggerPrinter implements Printer { private final List< LogAdapter> logAdapters = new ArrayList< > (); @Override public void addAdapter(@NonNull LogAdapter adapter) { logAdapters.add(checkNotNull(adapter)); } }

日志输出会遍历LogAdapter集合,所以集合中有多少个LogAdapter就会输出多少次。
class LoggerPrinter implements Printer { @Override public synchronized void log(int priority, @Nullable String tag, @Nullable String message, @Nullable Throwable throwable) { if (throwable != null & & message != null) { message += " : " + Utils.getStackTraceString(throwable); } if (throwable != null & & message == null) { message = Utils.getStackTraceString(throwable); } if (Utils.isEmpty(message)) { message = "Empty/NULL log message"; }for (LogAdapter adapter : logAdapters) { if (adapter.isLoggable(priority, tag)) { adapter.log(priority, tag, message); } } } }

Android开源日志库Logger的使用,日志重复打印无法对齐问题。

文章图片

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

支持字符串格式参数:
Logger.d("hello %s", "world");

支持集合(仅可用于调试日志):
Logger.d(MAP); Logger.d(SET); Logger.d(LIST); Logger.d(ARRAY);

JSON和XML支持(输出将处于调试级别):
Logger.json(JSON_CONTENT); Logger.xml(XML_CONTENT);

效果展示:
Android开源日志库Logger的使用,日志重复打印无法对齐问题。

文章图片

 
将日志保存到文件中,请参照官网。
 
Logger工作原理图(来自GitHub):
Android开源日志库Logger的使用,日志重复打印无法对齐问题。

文章图片

  解决在Android Studio 3.0以上的版本中Logger无法对齐的问题
 
/** * 自定义LogStrategy,解决AS3.0以上版本中日志无法对齐的问题 */ public class MyLogcatLogStrategy implements LogStrategy { @Override public void log(int priority, @Nullable String tag, @NonNull String message) { Log.println(priority, randomKey() + tag, message); }private int last; private String randomKey() { int random = (int) (10 * Math.random()); if (random == last) { random = (random + 1) % 10; } last = random; return String.valueOf(random); } }// Logger 初始化时,将该类实例化,并设置到 LogStrategy 中 PrettyFormatStrategy strategy = PrettyFormatStrategy.newBuilder() .logStrategy(new LogCatStrategy()) .tag("TAG")//(可选)这里也可以设置全局TAG .build(); Logger.addLogAdapter(new AndroidLogAdapter(strategy));

【Android开源日志库Logger的使用,日志重复打印无法对齐问题。】 

    推荐阅读