package Ġcom . ba eld ung . kotlin . logging Ċ Ċ import Ġorg . slf 4 j . Logger Ċ import Ġkotlin . properties . ReadOnly Property Ċ import Ġkotlin . reflect . K Property Ċ Ċ open Ġclass ĠLogger As Property Delegate Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlazy Logger Ġby Ġlazy Logger () ĊĠĠĠ Ġprotected Ġval Ġlogger Ġby ĠLogger Delegate () ĊĠĠĠ Ġprivate Ġval Ġlogger 2 Ġ= Ġlogger ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlazy Logger Comp Ġby Ġlazy Logger () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġlogger Comp Ġby ĠLogger Delegate () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġlog ( s : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info ( s ) ĊĠĠĠĠĠĠĠ Ġlogger 2 . info ( s ) ĊĠĠĠĠĠĠĠ Ġlazy Logger . info ( s ) ĊĠĠĠĠĠĠĠ Ġlogger Comp . info ( s ) ĊĠĠĠĠĠĠĠ Ġlazy Logger Comp . info ( s ) ĊĠĠĠ Ġ} Ċ Ċ } Ċ Ċ class ĠDelegate Subclass Ġ: ĠLogger As Property Delegate () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġlog ( s : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlogger . info ("-- Ġin Ġsub ") ĊĠĠĠĠĠĠĠ Ġsuper . log ( s ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun Ġlazy Logger ( for Class : ĠClass < *> ): ĠLazy < Logger > Ġ= ĊĠĠĠĠĠĠĠ Ġlazy Ġ{ Ġget Logger ( getClass For Logging ( for Class )) Ġ} Ċ Ċ fun Ġ< T Ġ: ĠAny > ĠT . lazy Logger (): ĠLazy < Logger > Ġ= Ġlazy Logger ( java Class ) Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ ĠLogger As Property Delegate (). log (" test ") ĊĠĠĠ ĠDelegate Subclass (). log (" sub ") Ċ } Ċ Ċ class ĠLogger Delegate < in ĠR Ġ: ĠAny > Ġ: ĠReadOnly Property < R , ĠLogger > Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠgetValue ( this Ref : ĠR , Ġproperty : ĠK Property <* >) Ġ= ĊĠĠĠĠĠĠĠ Ġget Logger ( getClass For Logging ( this Ref . java Class )) Ċ } Ċ