package Ġcom . av ito . utils . logging Ċ Ċ import Ġjava . io . File Ċ import Ġjava . io . Serializable Ċ Ċ interface ĠCI Logging Destination Ġ: ĠSerializable Ġ{ ĊĊĠĠĠ Ġfun Ġwrite ( message : ĠString , Ġthrowable : ĠThrowable ?) ĊĠĠĠ Ġfun Ġchild ( tag : ĠString ): ĠCI Logging Destination Ċ } Ċ Ċ internal Ġobject ĠStd out Destination Ġ: ĠCI Logging Destination Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ( message : ĠString , Ġthrowable : ĠThrowable ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ( message ) ĊĠĠĠĠĠĠĠ Ġthrowable ?. also Ġ{ Ġprintln ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġchild ( tag : ĠString ): ĠCI Logging Destination Ġ= Ġthis Ċ } Ċ Ċ internal Ġobject ĠOnly Message Stdout Destination Ġ: ĠCI Logging Destination Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ( message : ĠString , Ġthrowable : ĠThrowable ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġprintln ( message ) ĊĠĠĠĠĠĠĠ Ġthrowable ?. message ?. also Ġ{ Ġprintln ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġchild ( tag : ĠString ): ĠCI Logging Destination Ġ= Ġthis Ċ } Ċ Ċ internal Ġclass ĠFile Destination ( ĊĠĠĠ Ġprivate Ġval Ġfile : ĠFile Ċ ) Ġ: ĠCI Logging Destination Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġwrite ( message : ĠString , Ġthrowable : ĠThrowable ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġfile . parent File ?. mkdir s () ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! file . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . createNew File () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfile . append Text ("$ message ${ System . line Separator () }") ĊĠĠĠĠĠĠĠ Ġthrowable ?. also Ġ{ Ġfile . append Text ("$ it ${ System . line Separator () }") Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġchild ( tag : ĠString ): ĠCI Logging Destination Ġ= ĠFile Destination ( ĊĠĠĠĠĠĠĠ Ġfile Ġ= ĠFile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfile . parent , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"${ file . name Without Extension } #$ tag .${ file . extension }" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ) Ċ } Ċ