版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/BlogRecord/article/details/53958689
概述:
重写Logger日志工具类,便于选择需要打印排版后的日志信息,以及日志输出级别等
开发类:
- 日志接口(IPrinter):主要编写可以被外部调用接口,以及可以操作的类型。
- 日志输出类(LoggerPrinter):实现日志接口,并且对对应的方法,进行处理,最终打印。
- 日志操作类(Logger):日志操作类(对外公开直接调用),直接调用日志输入类方法。
- 日志设置(LogConfig):该类主要控制日志输出方式,以及是否输入日志,堆栈方法等。
- 日志级别(LogLevel):该类主要控制日志级别。
- 日志配置(LogConstants):该类主要是常量配置信息。
使用方法:
public class MainActivity extends AppCompatActivity {
// ====================== 其他 =========================
/** SDCard路径 */
public static final String BASE_SD_PATH = Environment.getExternalStorageDirectory().getAbsolutePath();
/** 根目录保存文件夹名*/
public static final String APP_SD_PATH = BASE_SD_PATH + File.separator + "LoggerPro" + File.separator;
/** 日志文件夹路径 */
public static final String LOG_SD_PATH = APP_SD_PATH + "LogMsg" + File.separator;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// =================== 奔溃保存日志 ====================
try {
String s = null;
s.indexOf("c");
} catch (NullPointerException e) {
// 打印格式化后的日志信息
Logger.other(LoggerUtils.getSortLogConfig("LogPro")).e(e, "s = null");
// 保存的路径
String fName = LOG_SD_PATH + System.currentTimeMillis() + ".log";
// 保存日志信息
LoggerUtils.saveErrorLog(e, fName, true);
// --
// 保存自定义头部、底部信息
LoggerUtils.saveErrorLog(e, "头部", "底部", LOG_SD_PATH, System.currentTimeMillis() + "_存在头部_底部.log", true);
// --
// 自定义(无设备信息、失败信息获取失败) - 正常不会出现,所以其实这个可以不用
String[] eHint = new String[] {"DeviceInfo = 获取设备信息失败","获取失败"};
// 保存的路径
fName = LOG_SD_PATH + System.currentTimeMillis() + "_orgs.log";
// 保存日志信息
LoggerUtils.saveErrorLog(e, fName, true, eHint);
}
// =================== 打印零散数据 ====================
ShareMsgVo sMsgVo = new ShareMsgVo();
sMsgVo.sTitle = "分享Blog";
sMsgVo.sText = null;
sMsgVo.sImagePath = "http://t.jpg";
sMsgVo.sTitleUrl = "http://www.test.com";
UserInfoVo uInfoVo = new UserInfoVo();
uInfoVo.uName = "BlogRecord";
uInfoVo.uPwd = "log_pwd";
uInfoVo.uAge = 100;
// 打印分享数据
Logger.d(LogTools.getShareMsgVoData(sMsgVo));
// 打印用户数据
Logger.d(LogTools.getUserInfoVoData(uInfoVo));
// 打印零散数据
Logger.d(LogTools.getScatteredData(uInfoVo.uName, sMsgVo.sTitle, uInfoVo.uAge));
// =================== 打印测试数据 ====================
/** 日志TAG */
final String tag = getClass().getName();
// ====== 使用 BaseApplication 默认配置 ======
// JSON数组
Logger.json("[" + Dummy.JSON_WITH_NO_LINE_BREAK + "," + Dummy.JSON_WITH_NO_LINE_BREAK + "]");
// JSON对象
Logger.json(Dummy.SMALL_SON_WITH_NO_LINE_BREAK);
// XML数据
Logger.xml(Dummy.XML_DATA);
// =========== 其他 ===========
Logger.v("测试数据 - v");
Logger.d("测试数据 - d");
Logger.i("测试数据 - i");
Logger.w("测试数据 - w");
Logger.e("错误 - e");
Logger.wtf("测试数据 - wtf");
// --
Logger.vTag(tag, "测试数据 - v");
Logger.vTag(tag, "测试数据 - d");
try {
Class clazz = Class.forName("asdfasd");
} catch (ClassNotFoundException e) {
Logger.e(e, "发生异常");
}
// 占位符(其他类型,一样)
Logger.d("%s测试占位符数据 - d%s",new Object[]{"1."," - Format"});
// --
Logger.dTag(tag, "%s测试占位符数据 - d%s",new Object[]{"1."," - Format"});
// ====== 使用自定义临时配置 ======
// 自定义配置
// logger.other(lConfig).d(message);
// logger.other(lConfig).dTag(tag, message);
// 打印不换行的日志信息
Logger.other(LoggerUtils.getDebugLogConfig(tag)).vTag("Temp", "测试数据 - v");
Logger.other(LoggerUtils.getDebugLogConfig(tag)).d("测试数据 - d");
Logger.other(LoggerUtils.getDebugLogConfig(tag)).i("测试数据 - i");
Logger.other(LoggerUtils.getDebugLogConfig(tag)).w("测试数据 - w");
Logger.other(LoggerUtils.getDebugLogConfig(tag)).e("错误 - e");
Logger.other(LoggerUtils.getDebugLogConfig(tag)).wtf(tag, "测试数据 - wtf");
// --
Logger.other(LoggerUtils.getDebugLogConfig(tag, LogLevel.DEBUG)).json(Dummy.SMALL_SON_WITH_NO_LINE_BREAK);
// ----
// 初始化日志配置
LogConfig lConfig = new LogConfig();
// 堆栈方法总数(显示经过的方法)
lConfig.methodCount = 3;
// 堆栈方法索引偏移(0 = 最新经过调用的方法信息,偏移则往上推,如 1 = 倒数第二条经过调用的方法信息)
lConfig.methodOffset = 0;
// 是否输出全部方法(在特殊情况下,如想要打印全部经过的方法,但是不知道经过的总数)
lConfig.isOutputMethodAll = false;
// 显示日志线程信息(特殊情况,显示经过的线程信息,具体情况如上)
lConfig.isDisplayThreadInfo = true;
// 是否排序日志(格式化后)
lConfig.isSortLog = true;
// 日志级别
lConfig.logLevel = LogLevel.DEBUG;
// 设置Tag(特殊情况使用,不使用全部的Tag时,如单独输出在某个Tag下)
lConfig.tag = "SAD";
// 打印不换行的日志信息
Logger.other(lConfig).e("new Config - e");
// ----
// 使用方法
LogConfig tLConfig = new LogConfig();
// 堆栈方法总数(显示经过的方法)
tLConfig.methodCount = 10;
// 堆栈方法索引偏移(0 = 最新经过调用的方法信息,偏移则往上推,如 1 = 倒数第二条经过调用的方法信息)
tLConfig.methodOffset = 0;
// 是否输出全部方法(在特殊情况下,如想要打印全部经过的方法,但是不知道经过的总数)
tLConfig.isOutputMethodAll = false;
// 显示日志线程信息(特殊情况,显示经过的线程信息,具体情况如上)
tLConfig.isDisplayThreadInfo = true;
// 是否排序日志(格式化后)
tLConfig.isSortLog = true;
// 日志级别
tLConfig.logLevel = LogLevel.DEBUG;
// 设置Tag(特殊情况使用,不使用全部的Tag时,如单独输出在某个Tag下)
tLConfig.tag = "SAD";
try {
String s = null;
s.indexOf("tLConfig");
} catch (Exception e) {
// 打印不换行的日志信息
Logger.other(tLConfig).e(e, "new Config - e");
}
}
}
图片:
是否排序日志(格式化后) isSortLog = true:
是否排序日志(格式化后) isSortLog = false: