Logger 使用

logger 是Android 的日志管理工具
github地址 https://github.com/orhanobut/logger
一 簡(jiǎn)單使用
使用步驟:
(1):首先在Android Studio 的glide文件中添加依賴
compile 'com.orhanobut:logger:1.15'
初始化logger 可以在自定義Application 中對(duì)logger 進(jìn)行初始化 【不進(jìn)行初始化也可以正常使用】

/** 
  * 初始化logger  默認(rèn)tag = PRETTYLOGGER 
  */
Logger.init();
/**
  * 初始化logger 自定義TAG
  */
Logger.init(TAG);

之后就可以使用logger 打印日志
先看一下logger的打印API

logger 提供了非常豐富的方法用來打印相關(guān)數(shù)據(jù)下面我們逐個(gè)分析一下使用方式
創(chuàng)建幾個(gè)變量用于打印數(shù)據(jù)

int number = 10;
String id = "1323290412";
String message = "msg";
String name = "小明";
List<String> strings = new ArrayList<>(Arrays.asList("北京","上海"));
List<City> cityList = new ArrayList<>(Arrays.asList( 
                            new City("北京"),
                            new City("上海"),
                            new City("廣州"), 
                            new City("杭州")));

  1. logger.i() 和 logger.i()打印格式化字符串

效果如下:

2.logger.d() 打印數(shù)組拾枣,對(duì)象數(shù)據(jù)等

Logger.d(strings);
Logger.d(cityList);

效果如下:


自定義Java bean

private  String cityName;
public City(String cityName) { 
   this.cityName = cityName;
}
public String getCityName() {
    return cityName;
}
public void setCityName(String cityName) {
    this.cityName = cityName;
}
@Override
public String toString() {   
 return "City{" + "cityName='" + cityName + '\'' + '}';}

logger.e() 打印錯(cuò)誤日志和logger.log()等 打印自定義Tag 日志 使用方式大同小異就不介紹了

Logger.t(TAG).d(message);

logger.t() 可用于打印臨時(shí)Tag,不同于Application 初始化中的TAG 這樣就非常方便了

3.logger.json() 打印json 數(shù)據(jù)


效果如下:

打印 Json

4.logger.xml() 打印Xml 類型數(shù)據(jù)

效果如下:

打印 Xml

二 結(jié)合OKHttp使用
以上就是logger 的基本使用方式,可以使用logger 與OkHttp 結(jié)合打印http 請(qǐng)求相關(guān)數(shù)據(jù) 先看一下效果圖:


LoggerHttpInterceptor

利用logger 實(shí)現(xiàn)與OKhttp結(jié)合打印請(qǐng)求數(shù)據(jù) 需要借助OKhttp的網(wǎng)絡(luò)攔截器 在自定義網(wǎng)絡(luò)攔截器 實(shí)現(xiàn)Interceptor 接口 中添加logger 打印信息,自定義網(wǎng)絡(luò)攔截器代碼如下:

private static final String TAG = "OKHttp"; 
private static final Charset UTF8 = Charset.forName("UTF-8");    
public LoggerHttpInterceptor() {    
}    
@Override    
public Response intercept(Chain chain) throws IOException {        
//log 信息        
StringBuilder builder = new StringBuilder();        
Request request = chain.request();        
RequestBody requestBody = request.body();        
boolean hasRequestBody = requestBody != null;        
Connection connection = chain.connection();        
Protocol protocol = connection != null ? connection.protocol() : Protocol.HTTP_1_1;        
String requestStartMessage = "請(qǐng)求方式----> " + request.method() + "\n請(qǐng)求地址: " + request.url() + "\nHttp 版本:" + protocol; 
builder.append(requestStartMessage);        
if (hasRequestBody) {            
  if (requestBody.contentType() != null) {                
        builder.append("\n請(qǐng)求頭:----> Content-Type: " + requestBody.contentType());            
    }        
}       
builder.append("\n請(qǐng)求參數(shù):");        
Headers headers = request.headers();        
for (int i = 0, count = headers.size(); i < count; i++) {            
String name = headers.name(i);            
// Skip headers from the request body as they are explicitly logged above.            
if (!"Content-Type".equalsIgnoreCase(name) && !"Content-Length".equalsIgnoreCase(name)) {                
    builder.append(name + ": " + headers.value(i));
            } 
       }
// builder.append("\n請(qǐng)求參數(shù):---end"); 
       if (!hasRequestBody) { 
           builder.append("\n請(qǐng)求結(jié)束 --> END " + request.method()); 
       } else if (bodyEncoded(request.headers())) {
            builder.append("\n請(qǐng)求結(jié)束 --> END " + request.method() + " (encoded body omitted)");
        } else { 
           Buffer buffer = new Buffer(); 
           requestBody.writeTo(buffer); 
           Charset charset = UTF8;
            MediaType contentType = requestBody.contentType();
            if (contentType != null) {
                charset = contentType.charset(UTF8); 
           } 
           if (isPlaintext(buffer)) {  
              builder.append("\n" + buffer.readString(charset)); 
               builder.append("\n請(qǐng)求結(jié)束 --> END " + request.method()
                        + " (" + requestBody.contentLength() + "-byte body)"); 
           } else {
                builder.append("\n請(qǐng)求結(jié)束 --> END " + request.method() + " (binary " 
                       + requestBody.contentLength() + "-byte body omitted)"); 
           }
        } 
       long startNs = System.nanoTime(); 
       Response response; 
       try {
            response = chain.proceed(request); 
       } catch (Exception e) { 
           builder.append("\n<-- 請(qǐng)求出錯(cuò): " + e); 
           throw e;
        }
        long tookMs = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startNs); 
       ResponseBody responseBody = response.body();
        long contentLength = responseBody.contentLength();
        builder.append("\n<-- 請(qǐng)求code: " + response.code() + "  請(qǐng)求狀態(tài): " + response.message() + "  請(qǐng)求地址: "                + response.request().url() + " 用時(shí):(" + tookMs + "ms)");
 
     BufferedSource source = responseBody.source();
     source.request(Long.MAX_VALUE);
 // Buffer the entire body. 
       Buffer buffer = source.buffer();
        Charset charset = UTF8; 
       MediaType contentType = responseBody.contentType();
        if (contentType != null) {
            try {
                charset = contentType.charset(UTF8); 
           } catch (UnsupportedCharsetException e) {
                builder.append("\nCouldn't decode the response body; charset is likely malformed.");
                builder.append("\n<-- END HTTP"); 
               return response; 
           }
        }
        if (!isPlaintext(buffer)) { 
           builder.append("\n<-- END HTTP (binary " + buffer.size() + "-byte body omitted)");
            return response;
        }
        if (contentLength != 0) { 
           builder.append("\n返回?cái)?shù)據(jù):"); 
           builder.append("\n" + buffer.clone().readString(charset));
        } 
       builder.append("\n<-- 請(qǐng)求結(jié)束 END HTTP (" + buffer.size() + "-byte body)"); 
       Logger.t(TAG).d("請(qǐng)求信息如下:\n" + builder);
        return response; 
   }
      /** 
        * Returns true if the body in question probably contains human readable text. Uses a small sample     * of code points to detect unicode control characters commonly used in binary file signatures.
        */ 
   static boolean isPlaintext(Buffer buffer) throws EOFException { 
       try {
            Buffer prefix = new Buffer(); 
           long byteCount = buffer.size() < 64 ? buffer.size() : 64;
            buffer.copyTo(prefix, 0, byteCount); 
           for (int i = 0; i < 16; i++) {
                if (prefix.exhausted()) {
                    break;
                } 
               int codePoint = prefix.readUtf8CodePoint();
                if (Character.isISOControl(codePoint) && !Character.isWhitespace(codePoint)) { 
                   return false; 
               }
            }
            return true;
        } catch (EOFException e) { 
           return false; // Truncated UTF-8 sequence. 
       } 
   } 
private boolean bodyEncoded(Headers headers) {
   String contentEncoding = headers.get("Content-Encoding"); 
       return contentEncoding!=null&&!contentEncoding.equalsIgnoreCase("identity");
    }

源碼下載: https://github.com/shishoufengwise1234/LoggerDemo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末梅肤,一起剝皮案震驚了整個(gè)濱河市司蔬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌姨蝴,老刑警劉巖俊啼,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異左医,居然都是意外死亡授帕,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門浮梢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來跛十,“玉大人,你說我怎么就攤上這事秕硝〗嬗常” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵远豺,是天一觀的道長(zhǎng)奈偏。 經(jīng)常有香客問我,道長(zhǎng)躯护,這世上最難降的妖魔是什么惊来? 我笑而不...
    開封第一講書人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮榛做,結(jié)果婚禮上唁盏,老公的妹妹穿的比我還像新娘。我一直安慰自己检眯,他們只是感情好厘擂,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著锰瘸,像睡著了一般刽严。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上避凝,一...
    開封第一講書人閱讀 51,631評(píng)論 1 305
  • 那天舞萄,我揣著相機(jī)與錄音,去河邊找鬼管削。 笑死倒脓,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的含思。 我是一名探鬼主播崎弃,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼甘晤,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了饲做?” 一聲冷哼從身側(cè)響起线婚,我...
    開封第一講書人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盆均,沒想到半個(gè)月后塞弊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡泪姨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年游沿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驴娃。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡奏候,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出唇敞,到底是詐尸還是另有隱情蔗草,我是刑警寧澤,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布疆柔,位于F島的核電站咒精,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏旷档。R本人自食惡果不足惜模叙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鞋屈。 院中可真熱鬧范咨,春花似錦、人聲如沸厂庇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽权旷。三九已至替蛉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拄氯,已是汗流浹背躲查。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留译柏,地道東北人镣煮。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像鄙麦,于是被迫代替她去往敵國(guó)和親怎静。 傳聞我的和親對(duì)象是個(gè)殘疾皇子邮弹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,162評(píng)論 25 707
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)蚓聘,斷路器,智...
    卡卡羅2017閱讀 134,659評(píng)論 18 139
  • 在應(yīng)用程序中添加日志記錄總的來說基于三個(gè)目的:監(jiān)視代碼中變量的變化情況盟劫,周期性的記錄到文件中供其他應(yīng)用進(jìn)行統(tǒng)計(jì)分析...
    時(shí)待吾閱讀 5,050評(píng)論 1 13
  • 從一月中旬的統(tǒng)一高考夜牡,二月的私立大學(xué)入學(xué)考,三月國(guó)立大學(xué)前期后期考試侣签,日本的高考戰(zhàn)爭(zhēng)終于結(jié)束塘装,只留下了硝煙彌漫。 ...
    少女冉閱讀 192評(píng)論 0 2
  • 寶寶到了一定月份就要開始給她鍛煉咀嚼的吃食,之前我給的是泡芙猴娩,可媽媽們總有一種自己DIY的心阴幌,吃什么又很苦惱,因?yàn)?..
    杜杜堂閱讀 634評(píng)論 0 1