1. Log框架Logger的基本使用:
「Logger」(https://github.com/orhanobut/logger)
2.Log框架Logger的封装使用:
- LoggerUtil类:
package comi.example.liy.firstbasicproject.tool;
import com.orhanobut.logger.AndroidLogAdapter;
import com.orhanobut.logger.Logger;
/**
* Created by liy on 2018-07-19.
* 日志打印工具类:对Logger再进行一层封装
* Android的Log等级通常有五类,按照日志级别由低到高分别是Verbose、Debug、Info、Warning、Error,其对应的log定义在system层。
* 注:Info、Warnning、Error等级的Log在普通调试中不随意滥用。
*/
public class LoggerUtil {
private static LoggerUtil loggerUtil;
private LoggerUtil(){
Logger.addLogAdapter(new AndroidLogAdapter());
//在初始化过程中可以使用默认值配置初始化也可以自定义
/*FormatStrategy formatStrategy = PrettyFormatStrategy.newBuilder()
.showThreadInfo(true) //(可选)是否显示线程信息,默认为true
.methodCount(2) //(可选)要显示的方法行数,默认2行
.methodOffset(5) //(可选)隐藏内部方法调用到偏移量,默认5
.tag("PRETTY_LOGGER") //(可选)每个日志的全局标记,默认PRETTY_LOGGER
.build();
Logger.addLogAdapter(new AndroidLogAdapter(formatStrategy));///根据上面的格式设置logger相应的适配器*/
}
public static LoggerUtil getLoggerUtil(){
if(loggerUtil == null){
loggerUtil = new LoggerUtil();
}
return loggerUtil;
}
/**
* 是否开启debug
*/
private static boolean isDebug = true;
/**
*Verbose就是冗长啰嗦的:通常表达开发调试过程中的一些详细信息,不过滤地输出所有调试信息。
*/
public static void v(String tag,String msg){
if(isDebug){
Logger.t(tag).v(msg+"");
}
}
/**
* Debug来表达调试信息:用Log.d()能输出Debug、Info、Warning、Error级别的Log信息。
*/
public static void d(String tag,String msg){
if(isDebug){
Logger.t(tag).d( msg+"");
}
}
public static void d(String tag, Object... args) {
if(isDebug){
Logger.t(tag).d(args);
}
}
public static void d(String tag,Object object) {
if(isDebug){
Logger.t(tag).d(object);
}
}
/**
* Info来表达一些信息:用Log.i()能输出Info、Warning、Error级别的Log信息。
*/
public static void i(String tag,String msg){
if(isDebug){
Logger.t(tag).i( msg+"");
}
}
/**
* Warning表示警告:但不一定会马上出现错误,开发时有时用来表示特别注意的地方。用Log.w()能输出Warning、Error级别的Log信息。
*/
public static void w(String tag,String msg){
if(isDebug){
Logger.t(tag).w(msg+"");
}
}
/**
* Error表示出现错误:是最需要关注解决的。用Log.e()输出,能输出Error级别的Log信息。
*/
public static void e(String tag,String msg){
if(isDebug){
Logger.t(tag).e(msg+"");
}
}
public static void json(String tag,String msg){
if(isDebug){
Logger.t(tag).json(msg+"");
}
}
public static void xml(String tag,String msg){
if(isDebug){
Logger.t(tag).xml(msg+"");
}
}
}
- LoggerActivity中调用:
package comi.example.liy.firstbasicproject.ui.activity;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import comi.example.liy.firstbasicproject.R;
import comi.example.liy.firstbasicproject.tool.LoggerUtil;
import comi.example.liy.firstbasicproject.ui.interfaces.BasicActivity;
/**
* Created by liy on 2018-07-11.
* 1、使用Logger框架
* 2、支持格式:
*
* 注:打印集合的时候,特别是数组时,前面不要添加其他字符,如:Logger.d("数组集合"+strs);这样会把整体当做一个参数,导致判断错误,不能正常输出数组类型。
* 其次打印集合时,使用DEBUG等级。
*/
public class LoggerActivity extends Activity implements BasicActivity {
private static final String TAG = LoggerActivity.class.getSimpleName();
private Button btn1;
private Button btn2;
private Button btn3;
private Button btn4;
private Button btn5;
private LoggerUtil loggerUtil;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_logger);
initViews();
initData();
initListeners();
}
@Override
public void initViews() {
btn1 = (Button)findViewById(R.id.activity_logger_logger1);
btn2 = (Button)findViewById(R.id.activity_logger_logger2);
btn3 = (Button)findViewById(R.id.activity_logger_logger3);
btn4 = (Button)findViewById(R.id.activity_logger_logger4);
btn5 = (Button)findViewById(R.id.activity_logger_logger5);
}
@Override
public void initData() {
loggerUtil = LoggerUtil.getLoggerUtil();
loggerUtil.d(TAG,"初始化Logger");
}
@Override
public void initListeners() {
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
testNormalLogger();
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
testFormatLogger();
}
});
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
testCollectionLogger();
}
});
btn4.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
testJsonLogger();
}
});
btn5.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
testXmlLogger();
}
});
}
public void testNormalLogger(){
loggerUtil.d(TAG,"DEBUG日志");
loggerUtil.i(TAG,"INFO日志");
loggerUtil.e(TAG,"ERROR日志");
}
public void testFormatLogger(){
loggerUtil.d("hello %s, luck number is %d", "world", 5);
}
public void testCollectionLogger(){
/**
* List
*/
List list = new ArrayList();
list.add("hello");
list.add("world");
loggerUtil.d(TAG,list);
/**
* Map
*/
Map map = new HashMap();
map.put("map1","hello");
map.put("map2","world");
loggerUtil.d(TAG,map);
/**
* Set
*/
Set set = new HashSet();
set.add("hello");
set.add("world");
loggerUtil.d(TAG,set);
/**
* Array
*/
String[] strs = {"hello", "world"};
//loggerUtil.d(TAG,strs);
}
public void testJsonLogger(){
String jsonDate = "{\"id\":859,\"channelnumber\":681,\"bilingual\":0,\"name\":\"beIN Sports 2 English 600K H265\",\n" +
" \"language\":\"EN\",\n" +
" \"videotype\":\"MPEG2\",\"audiotype\":\"MPEP1\",\"callsign\":\"beIN Sports 2 English 600K H265\",\"country\":\"cn\"};";
loggerUtil.json(TAG,jsonDate);
}
public void testXmlLogger(){
String xmlDate = "<province id=\"01\" name=\"北京\"> \n" +
" <city id=\"0101\" name=\"北京\"> \n" +
" <county id=\"010101\" name=\"北京\" weatherCode=\"101010100\"/> \n" +
" <county id=\"010102\" name=\"海淀\" weatherCode=\"101010200\"/> \n" +
" <county id=\"010103\" name=\"朝阳\" weatherCode=\"101010300\"/> \n" +
" <county id=\"010110\" name=\"石景山\" weatherCode=\"101011000\"/> \n" +
" </city> \n" +
" </province> ";
loggerUtil.xml(TAG,xmlDate);
}
}
网友评论