package Ġcom . smile hack er . ex . d log Ċ Ċ abstract Ġclass ĠBase Logger : ĠI Tagged Logger Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġenable Ġlogger ĊĠĠĠĠ Ġ* Ġif Ġset Ġit Ġto Ġfalse , Ġno Ġlog Ġwill Ġshow . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġenable Ġ: ĠBoolean Ġ= Ġtrue ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġwhen Ġlog Ġmethod 's Ġlevel Ġbigger Ġthan Ġlog Level , Ġ Ġit Ġwill Ġshow ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġlog Level : ĠInt Ġ= ĠILogger . VERBOSE ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġshow Ġcaller Ġstack Ġin Ġmsg ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġvar Ġshow Caller In Message Ġ= Ġfalse ĊĊĊĠĠĠ Ġabstract Ġfun Ġget Logger (): ĠILogger ĊĊĠĠĠ Ġoverride Ġfun Ġv ( tag : ĠString , Ġmsg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Enable ( I Logger . VERBOSE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Logger (). v ( tag , Ġformat Msg ( msg )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġv ( tag : ĠString , Ġmsg : ĠString , Ġtr : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Enable ( I Logger . VERBOSE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Logger (). v ( tag , Ġformat Msg ( msg ), Ġtr ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġd ( tag : ĠString , Ġmsg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Enable ( I Logger . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Logger (). d ( tag , Ġformat Msg ( msg )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġd ( tag : ĠString , Ġmsg : ĠString , Ġtr : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Enable ( I Logger . DEBUG ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Logger (). d ( tag , Ġformat Msg ( msg ), Ġtr ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġi ( tag : ĠString , Ġmsg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Enable ( I Logger . INFO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Logger (). i ( tag , Ġformat Msg ( msg )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġi ( tag : ĠString , Ġmsg : ĠString , Ġtr : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Enable ( I Logger . INFO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Logger (). i ( tag , Ġformat Msg ( msg ), Ġtr ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġw ( tag : ĠString , Ġmsg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Enable ( I Logger . WARN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Logger (). w ( tag , Ġformat Msg ( msg )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġw ( tag : ĠString , Ġmsg : ĠString , Ġtr : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Enable ( I Logger . WARN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Logger (). w ( tag , Ġformat Msg ( msg ), Ġtr ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġw ( tag : ĠString , Ġtr : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Enable ( I Logger . WARN ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( show Caller In Message ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Logger (). w ( tag , Ġformat Msg (""), Ġtr ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Logger (). w ( tag , Ġtr ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġe ( tag : ĠString , Ġmsg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Enable ( I Logger . ERROR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Logger (). e ( tag , Ġformat Msg ( msg )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġe ( tag : ĠString , Ġmsg : ĠString , Ġtr : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Enable ( I Logger . ERROR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Logger (). e ( tag , Ġformat Msg ( msg ), Ġtr ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġinline Ġfun Ġwhen Enable ( level : ĠInt , Ġr : Ġ() -> Unit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( enable Ġ&& ĠD Log . enable Ġ&& Ġlevel Ġ>= Ġlog Level Ġ&& Ġlevel Ġ>= ĠD Log . logLevel ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġformat Msg ( msg : ĠString ) Ġ: ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( show Caller In Message ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ"[ ${ get Call Stack ()} ] Ġ>> \ n $ msg " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmsg ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Tag (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġget Call Stack (). className ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġget Call Stack () Ġ: ĠStack Trace Element Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpkg Ġ= Ġthis :: class . java .` package `. name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġelements Ġ= ĠThrowable (). stack Trace ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġelements . find Ġ{ Ġ! it . className . contains ( pkg ) Ġ} Ġ?: Ġelements [ 0 ] ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }