Android Log 日志工具,顯示超長(zhǎng)日志

【Java-代碼】

import android.util.Log;

public class LogUtils {

    /**
     * 手動(dòng)關(guān)閉日志阁将,false關(guān)閉琳状,true打開(kāi)
     */
    private static boolean mLogAble = isDebug();

    private static boolean isDebug() {
        return true;
    }


    public static void v(String tag, String msg) {
        v(tag, msg, (Throwable) null);
    }

    public static void v(String tag, String msg, Throwable ex) {
        showLongLog(0, tag, msg, ex);
    }

    public static void d(String tag, String msg) {
        d(tag, msg, (Throwable) null);
    }

    public static void d(String tag, String msg, Throwable ex) {
        showLongLog(1, tag, msg, ex);
    }

    public static void i(String tag, String msg) {
        i(tag, msg, (Throwable) null);
    }

    public static void i(String tag, String msg, Throwable ex) {
        showLongLog(2, tag, msg, ex);
    }


    public static void w(String tag, String msg) {
        w(tag, msg, (Throwable) null);
    }

    public static void w(String tag, String msg, Throwable ex) {
        showLongLog(3, tag, msg, ex);
    }


    public static void e(String tag, String msg) {
        e(tag, msg, (Throwable) null);
    }

    public static void e(String tag, String msg, Throwable ex) {
        showLongLog(4, tag, msg, ex);
    }

    private static void showLongLog(int level, String tag, String msg, Throwable tr) {
        if (mLogAble) {
            msg = msg + '\n' + Log.getStackTraceString(tr);
            //為了顯示完整中文日志,1024
            int segmentSize = 1024;
            long length = msg.length();

            if (length > segmentSize) {
                while (msg.length() > segmentSize) {
                    // 循環(huán)分段打印日志
                    String logContent = msg.substring(0, segmentSize);
                    showLog(level, tag,  logContent);
                    msg = msg.substring(logContent.length());
                }
            }
            showLog(level, tag,  msg);
        }
    }

    private static void showLog(int level, String tag, String msg) {
        switch (level) {
            case 1:
                Log.d(tag, msg);
                break;
            case 2:
                Log.i(tag, msg);
                break;
            case 3:
                Log.w(tag, msg);
                break;
            case 4:
                Log.e(tag, msg);
                break;
            default:
                Log.v(tag, msg);
                break;
        }
    }

}



【Kotlin-代碼】

import android.util.Log

object LogUtilsKt {
    /**
     * 手動(dòng)關(guān)閉日志勾笆,false關(guān)閉阿宅,true打開(kāi)
     */
    private val mLogAble = isDebug

    private val isDebug: Boolean
        private get() = true

    @JvmOverloads
    fun v(tag: String, msg: String, ex: Throwable? = null as Throwable?) {
        showLongLog(0, tag, msg, ex)
    }

    @JvmOverloads
    fun d(tag: String, msg: String, ex: Throwable? = null as Throwable?) {
        showLongLog(1, tag, msg, ex)
    }

    @JvmOverloads
    fun i(tag: String, msg: String, ex: Throwable? = null as Throwable?) {
        showLongLog(2, tag, msg, ex)
    }

    @JvmOverloads
    fun w(tag: String, msg: String, ex: Throwable? = null as Throwable?) {
        showLongLog(3, tag, msg, ex)
    }

    @JvmOverloads
    fun e(tag: String, msg: String, ex: Throwable? = null as Throwable?) {
        showLongLog(4, tag, msg, ex)
    }

    private fun showLongLog(level: Int, tag: String, msg: String, tr: Throwable?) {
        var message = msg
        if (mLogAble) {
            message = """
                $message
                ${Log.getStackTraceString(tr)}
                """.trimIndent()

            //為了顯示完整中文日志候衍,1024
            val segmentSize = 1024
            val length = message.length.toLong()

            if (length > segmentSize) {
                while (message.length > segmentSize) {
                    // 循環(huán)分段打印日志
                    val logContent = message.substring(0, segmentSize)
                    showLog(level, tag, logContent)
                    message = message.substring(logContent.length)
                }
            }
            showLog(level, tag, message)
        }
    }

    private fun showLog(level: Int, tag: String, msg: String) {
        when (level) {
            1 -> Log.d(tag, msg)
            2 -> Log.i(tag, msg)
            3 -> Log.w(tag, msg)
            4 -> Log.e(tag, msg)
            else -> Log.v(tag, msg)
        }
    }
}



【測(cè)試】

import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.LargeTest;
import androidx.test.filters.MediumTest;
import com.technology.myapplication.utils.LogUtils;
import com.technology.myapplication.utils.LogUtilsKt;
import org.junit.Test;
import org.junit.runner.RunWith;

@MediumTest
@RunWith(AndroidJUnit4.class)
@LargeTest
public class LogExampleUnitTest {

    @Test
    public void testV() {
        //中文字符和英文數(shù)字字符顯示的長(zhǎng)度有所不同
        //經(jīng)過(guò)代碼測(cè)試,中文日志不分段顯示的話(huà)洒放,大約能顯示1355個(gè)字符
        //數(shù)字英文字符大約能顯示4055個(gè)字符
        //所以當(dāng)需要顯示一段比較長(zhǎng)的日志時(shí)蛉鹿,每次顯示1024個(gè)

        String msg = "自己復(fù)制粘貼一條很長(zhǎng)的字符顯示,最好超過(guò)4096個(gè)字符";
        LogUtils.v("test-V", "size=" + msg.length());
        //不分割往湿,只能顯示字符:1355
        LogUtils.v("test-V", msg);

        String s = "";
        String text = "";
        for (int i = 0; i < 10000; i++) {
            s = s + "." + i;
            text += "我";

            if (i == 1033) {
                //不分割時(shí)榨为,所顯示的數(shù)字字符長(zhǎng)度
                LogUtils.v("test-V", "顯示的長(zhǎng)度=" + (s.length() - 1));
            }
        }

        LogUtils.v("test-V", "數(shù)字字符長(zhǎng)度 size=" + s.length());
        //不分割,只能顯示字符:4059
        LogUtils.v("test-V", s);

        LogUtils.v("test-V", "中文字符長(zhǎng)度 size=" + text.length());
        //不分割煌茴,只能顯示字符:1353
        LogUtils.v("test-V", text);
    }

    @Test
    public void testKt(){
        String msg = "自己復(fù)制粘貼一條很長(zhǎng)的字符顯示随闺,最好超過(guò)4096個(gè)字符";
        LogUtilsKt.INSTANCE.e("testKt", msg);
    }
}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蔓腐,隨后出現(xiàn)的幾起案子矩乐,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件散罕,死亡現(xiàn)場(chǎng)離奇詭異分歇,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)欧漱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)职抡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人误甚,你說(shuō)我怎么就攤上這事缚甩。” “怎么了窑邦?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,711評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵擅威,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我冈钦,道長(zhǎng)郊丛,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,380評(píng)論 1 293
  • 正文 為了忘掉前任瞧筛,我火速辦了婚禮厉熟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘较幌。我一直安慰自己揍瑟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布绅络。 她就那樣靜靜地躺著,像睡著了一般嘁字。 火紅的嫁衣襯著肌膚如雪恩急。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,301評(píng)論 1 301
  • 那天纪蜒,我揣著相機(jī)與錄音衷恭,去河邊找鬼。 笑死纯续,一個(gè)胖子當(dāng)著我的面吹牛随珠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播猬错,決...
    沈念sama閱讀 40,145評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼窗看,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了倦炒?” 一聲冷哼從身側(cè)響起显沈,我...
    開(kāi)封第一講書(shū)人閱讀 39,008評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后拉讯,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體涤浇,經(jīng)...
    沈念sama閱讀 45,443評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評(píng)論 3 334
  • 正文 我和宋清朗相戀三年魔慷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了只锭。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,795評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡院尔,死狀恐怖蜻展,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情召边,我是刑警寧澤铺呵,帶...
    沈念sama閱讀 35,501評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站隧熙,受9級(jí)特大地震影響片挂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贞盯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評(píng)論 3 328
  • 文/蒙蒙 一音念、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧躏敢,春花似錦闷愤、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,731評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至啼器,卻和暖如春旬渠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背端壳。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,865評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工告丢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人损谦。 一個(gè)月前我還...
    沈念sama閱讀 47,899評(píng)論 2 370
  • 正文 我出身青樓岖免,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親照捡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子颅湘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評(píng)論 2 354