package Ġcom . sil ence fly 9 6 . module _ base . utils Ċ Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Handler Thread Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . util . Log Ċ import Ġjava . io . File Ċ import Ġjava . lang . reflect . Method Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ /** Ċ Ġ* Ġ æĹ¥å¿Ĺ å·¥åħ· ç±» Ċ Ġ* Ġå¦Ĥæŀľ éľĢè¦ģ ä¿ĿåŃĺ æĹ¥å¿Ĺ åĪ° æĸĩä»¶ ï¼Į éľĢè¦ģ ä¼łåħ¥ ä¸Ģä¸ª Ġhandler Thread Ċ Ġ* Ġä½¿çĶ¨ äºĨ åıį å°Ħ ï¼Į è¯· åĭ ¿ æ·· æ· Ĩ Ċ Ġ* Ġå¦Ĥæŀľ ä¸įéľĢè¦ģ ä½¿çĶ¨ ä¿ĿåŃĺ åĪ° æĸĩä»¶ ï¼Į å»ºè®® çĽ´æİ¥ ä½¿çĶ¨ ĠLog , å¹¶ éĢļè¿ĩ æ·· æ· Ĩ è§ĦåĪĻ åľ¨ æŃ£ å¼ı çīĪ ä¸Ń åİ» éĻ¤ æĹ¥å¿Ĺ Ċ Ġ* Ċ Ġ* Ġ@ author Ġf dk Ċ Ġ* Ġ@ date Ġ 2 0 2 1 / 0 7 / 1 2 Ċ Ġ*/ Ċ @ Suppress (" unused ") Ċ object ĠLog Util Ġ{ ĊĊĠĠĠ Ġ/** ĠLog è¾ĵåĩº çļĦ æİ§åĪ¶ å¼Ģ åħ³ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġis Show Log Ġ= Ġtrue ĊĊĠĠĠ Ġ/** ĠLog è¾ĵåĩº çļĦ çŃī çº§ , Ġ 0 - v - d - i - w - e - 6 Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġout Level Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** ĠLog è¾ĵåĩº åĪ° æľ¬åľ° æĸĩä»¶ æİ§åĪ¶ å¼Ģ åħ³ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġis Save Log Ġ= Ġtrue ĊĊĠĠĠ Ġ/** Ġ èĩªå®ļä¹ī Log å¼Ģ å¤´ å½¢å¼ı Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġstart Head Ġ= Ġ" Log Util Ġ- Ġ- Ġ- Ġ- " ĊĊĠĠĠ Ġ/** ĠLog è¾ĵåĩº æĸĩä»¶ çĽ®å½ķ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġlog Dir Ġ= Ċ // ĠĠĠĠĠĠĠ ĠEnvironment . get External Storage Directory (). path Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"/ logs /" ĊĊĠĠĠ Ġ/** ĠLog è¾ĵåĩº æĸĩä»¶ åĲį Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġlog Name Ġ= ĠDate ( System . currentTimeMillis ()). let Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsimple DateFormat Ġ= ĠSimpleDateFormat (" log _ yyyy MM dd . log ", ĠLocale . CH INA ) ĊĠĠĠĠĠĠĠ Ġsimple DateFormat . time Zone Ġ= ĠTime Zone . getTime Zone (" GMT + 8 ") ĊĠĠĠĠĠĠĠ Ġsimple DateFormat . format ( it ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ æĹ¥å¿Ĺ ç¼ĵåŃĺ é¢Ħ å®ļä¹ī æľĢå¤§ ç¼ĵåŃĺ æķ°éĩı Ġ*/ ĊĠĠĠ Ġprivate Ġconst Ġval ĠLOG _ BUFFER _ SIZE Ġ= Ġ 1 0 0 0 ĊĊĠĠĠ Ġ/** Ġ å¤ĦçĲĨ æ¶Īæģ¯ çļĦ ĠHandler Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Handler : ĠHandler ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** Ġ è¦ģ è¾ĵåĩº æĹ¥å¿Ĺ çļĦè¯Ŀ ï¼Į éľĢè¦ģ ä»İ å¤ĸéĥ¨ ä¼łåħ¥ ä¸Ģä¸ª å¼ĤæŃ¥ çļĦ ĠHandler Thread ï¼Į æ³¨æĦı åľ¨ å¤ĸéĥ¨ éĶĢ æ¯ ģ Ġ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġm Handler Thread : ĠHandler Thread ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĲ¯åĬ¨ çº¿ç¨ĭ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĹ¥å¿Ĺ ç¼ĵåŃĺ ï¼Į åĨĻ åľ¨ è¿Ļ ï¼Į éģ¿åħį åľ¨ éĻ¤ Ġhandler Ġ ä¹ĭ å¤ĸ è°ĥçĶ¨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Log Buffer Ġ= ĠArrayList < String >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// val Ġm Log Buffer Ġ= ĠCopy On Write ArrayList < String >() ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ èİ·å¾Ĺ çº¿ç¨ĭ çļĦ Ġhandler ĠæĿ¥ å¤ĦçĲĨ Ġlog Ġæ ¶ Ī æģ¯ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler Ġ= ĠHandler ( lo oper ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Log Buffer . add ( it . obj Ġas ĠString ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Log Buffer . size Ġ> ĠLOG _ BUFFER _ SIZE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsb Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( log Ġin Ġm Log Buffer ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsb . append ( log ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ä½¿çĶ¨ kotlin åĩ½æķ° ä»¥ è¿½åĬł çļĦ å½¢å¼ı åĨĻåħ¥ æĸĩä»¶ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( log Dir , Ġlog Name ). append Text ( sb . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// æ¸ħ ç©º æķ°æį® ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Log Buffer . clear () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ è¯¦ç»Ĩ è¾ĵåĩº è°ĥè¯ķ ĊĠĠĠĠ Ġ* Ġ@ param Ġobj Tag ĊĠĠĠĠ Ġ* Ġ@ param Ġmsg ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġv ( obj Tag : ĠAny , Ġmsg : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog ( obj Tag , Ġmsg , Ġ" v ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġdebug è¾ĵåĩº è°ĥè¯ķ ĊĠĠĠĠ Ġ* Ġ@ param Ġobj Tag ĊĠĠĠĠ Ġ* Ġ@ param Ġmsg ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġd ( obj Tag : ĠAny , Ġmsg : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog ( obj Tag , Ġmsg , Ġ" d ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġi ( obj Tag : ĠAny , Ġmsg : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog ( obj Tag , Ġmsg , Ġ" i ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ èŃ¦ åĳĬ çļĦ è°ĥè¯ķ ä¿¡æģ¯ ĊĠĠĠĠ Ġ* Ġ@ param Ġobj Tag ĊĠĠĠĠ Ġ* Ġ@ param Ġmsg ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġw ( obj Tag : ĠAny , Ġmsg : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog ( obj Tag , Ġmsg , Ġ" w ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ éĶĻè¯¯ è°ĥè¯ķ ä¿¡æģ¯ ĊĠĠĠĠ Ġ* Ġ@ param Ġobj Tag ĊĠĠĠĠ Ġ* Ġ@ param Ġmsg ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġe ( obj Tag : ĠAny , Ġmsg : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġlog ( obj Tag , Ġmsg , Ġ" e ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĹ¥å¿Ĺ å¤ĦçĲĨ æĸ¹æ³ķ ĊĠĠĠĠ Ġ* Ġ@ param Ġobj Tag ĊĠĠĠĠ Ġ* Ġ@ param Ġmsg ĊĠĠĠĠ Ġ* Ġ@ param Ġtype Ġ è¾ĵåĩº ç±»åŀĭ ï¼ļ v Ġd Ġi Ġw Ġe ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġlog ( obj Tag : ĠAny , Ġmsg : ĠString ?, Ġtype : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Show Log ) Ġ{ Ġreturn Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġtag : ĠString ĊĊĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ obj Tag æĺ¯ String ï¼Į åĪĻ çĽ´æİ¥ ä½¿çĶ¨ ĊĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ obj Tag ä¸įæĺ¯ String ï¼Į åĪĻ ä½¿çĶ¨ å®ĥçļĦ ç±» åĲį ĊĠĠĠĠĠĠĠ Ġ// Ġå¦Ĥæŀľ åľ¨ åĮ ¿ åĲį åĨħéĥ¨ ç±» ï¼Į åĨĻ this çļĦè¯Ŀ æĺ¯ è¯ĨåĪ« ä¸į äºĨ è¯¥ ç±» ï¼Į æīĢä»¥ èİ·åıĸ å½ĵåīį å¯¹è±¡ åħ¨ ç±» åĲį æĿ¥ åĪĨ éļĶ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( obj Tag ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġobj Tag ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠClass < *> Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġobj Tag . simple Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġobj Tag . java Class . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsplit Ġ= Ġtag . split ("\\ . "). to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag Ġ= Ġsplit [ split . size Ġ- Ġ 1 ]. split ("\\ $ "). to Typed Array ()[ 0 ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// éĢļè¿ĩ åıį å°Ħ åİ» æī§è¡Į å¯¹åºĶ ĠLOG Ġæĸ¹æ³ķ ĊĠĠĠĠĠĠĠ Ġfunc [ type ]?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( TextUtils . isEmpty ( msg )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// éĿĻæĢģ æĸ¹æ³ķ è°ĥçĶ¨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvoke ( null , Ġstart Head Ġ+ Ġtag , Ġ" EMPTY ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( out Level Ġ<= Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinvoke ( null , Ġstart Head Ġ+ Ġtag , Ġmsg !! ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Save Log ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// éĢļè¿ĩ Ġhandler Ġ åıĳéĢģ æ¶Īæģ¯ åĪ° å¼ĤæŃ¥ çº¿ç¨ĭ å¤ĦçĲĨ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Handler ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsendMessage ( obtain Message ( 0 , Ġ"$ start Head Ġ$ tag Ġ$ type : Ġ$ msg ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ åĤ¨ åŃĺ ĠLog Ġ ç±»çļĦ äºĶ ä¸ª æĸ¹æ³ķ ï¼Į ä¾¿ äºİ ç»Łä¸Ģ è°ĥçĶ¨ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġfunc Ġ= ĠHashMap < String , Method >(). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclazz Ġ= ĠLog :: class . java ĊĠĠĠĠĠĠĠ Ġput (" v ", clazz . getDeclared Method (" v ")) ĊĠĠĠĠĠĠĠ Ġput (" d ", clazz . getDeclared Method (" d ")) ĊĠĠĠĠĠĠĠ Ġput (" i ", clazz . getDeclared Method (" i ")) ĊĠĠĠĠĠĠĠ Ġput (" w ", clazz . getDeclared Method (" w ")) ĊĠĠĠĠĠĠĠ Ġput (" e ", clazz . getDeclared Method (" e ")) ĊĠĠĠ Ġ} Ċ }