先上个效果图:
模板一:
模板二:
LOG常用的方法有以下5个:
Log.v() Log.d() Log.i() Log.w() Log.e() 。分别对应下图,除Assert
1、Verbose 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时使用就是Log.v(“”,”“);
2、Debug 的输出颜色是蓝色的,仅输出debug调试的意思,但他会输出上层的信息,过滤起来可以通过DDMS的Logcat标签来选择.
3、Info 的输出为绿色,一般提示性的消息information,它不会输出Log.v和Log.d的信息,但会显示i、w和e的信息
4、Warn 的意思为橙色,可以看作为warning警告,一般需要我们注意优化Android代码,同时选择它后还会输出Log.e的信息。
5、Error 为红色,可以想到error错误,这里仅显示红色的错误信息,这些错误就需要我们认真的分析,查看栈的信息了。
6、Assert 表示断言失败后的错误消息,这类错误原本是不可能出现的错误,现在却出现了,是极其严重的错误类型。
Debug属于调试日志
其他五类Log的重要程度排序如下。
Assert > Error > Warn > Info > Verbose
推荐颜色:
- Verbose:#000000
- Debug :#0000FF
- Info:#008700
- Warn:#878700
- Error:#FF0000
Assert:#8F0005
Android Studio设置颜色步骤:
File ->Setting ->Editor->Color&Fonts->Android Logcat
有个Log的工具类:https://github.com/orhanobut/logger
用法很简单:
//在Application中初始化一下
Logger.addLogAdapter(new AndroidLogAdapter());
//就可以用了
Logger.v("verbose");
Logger.d("debug");
Logger.i("information");
Logger.w("warning");
Logger.e("error");
Logger.json("{\"a\": \"Hello\", \"b\": \"World\"}");
Logger.xml("<note>\n" +
"<to>George</to>\n" +
"<from>John</from>\n" +
"<heading>Reminder</heading>\n" +
"<body>Don't forget the meeting!</body>\n" +
"</note>");
好炫酷,好想自己写一个,看了看源码,试试写个简单的
先分析下源码的执行流程:
Logger.v
-> LoggerPrinter.log
-> AndroidLogAdapter.log
-> PrettyFormatStrategy.log
-> PrettyFormatStrategy.logChunk
-> LogcatLogStrategy.log 至此打印结束
多日志打印即循环执行此过程,此项目很好的使用了策略模式和Builder模式。
其中:
Printer 的实现类有:LoggerPrinter
LogAdapter 的实现类有:AndroidLogAdapter、DiskLogAdapter
FormatStrategy 的实现类有:CsvFormatStrategy、PrettyFormatStrategy
LogStrategy 的实现类有:DiskLogStrategy、LogcatLogStrategy
BuildConfig 里面是一些常量
Logger 一些具体的执行方法,调用LoggerPrinter 中的具体实现供客户端调用
Utils 工具类
下面仿照大佬的代码写个简单的吧
既然是简单的,就简单到底,就3个核心类(实际就一个):
1、IPrinter.java(定义一些接口)
package com.zx.logs;
public interface IPrinter {
void v(String message, Object... args);
void d(String message, Object... args);
void i(String message, Object... args);
void w(String message, Object... args);
void e(String message, Object... args);
void json(String json);
void xml(String xml);
void log(int priority, String message, Throwable throwable, Object... args);
// priority 优先顺序
// message 消息
// tag 日志中tag,相当于Logcat Filter
// throwable 子线程中打印日志,提取发生行数
// args String格式化字符串
void log(int priority, String message, String tag, Throwable throwable, Object... args);
}
2、Logs.java(暴露出来方法)
package com.zx.logs;
public class Logs {
private static IPrinter iPrinter = new LogsPrinter();
public static void v(String message, Object... args) {
iPrinter.v(message, args);
}
public static void d(String message, Object... args) {
i