package Ġcom . se an sh ub in . kotlin . try me . domain . logger Ċ Ċ import Ġcom . se an sh ub in . kotlin . try me . domain . contract . Files Contract Ċ import Ġcom . se an sh ub in . kotlin . try me . domain . contract . Files Delegate Ċ import Ġjava . time . Clock Ċ import Ġjava . nio . file . Path Ċ import Ġjava . time . Z onedDateTime Ċ import Ġjava . time . format . DateTime Formatter Ċ Ċ class ĠLoggerFactory ( ĊĠĠĠ Ġprivate Ġval Ġclock : ĠClock , ĊĠĠĠ Ġprivate Ġval Ġfiles : ĠFiles Contract , ĊĠĠĠ Ġprivate Ġval Ġemit : Ġ( String ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġcreate Logger ( path : ĠPath , Ġname : ĠString ): ĠLogger Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnow Ġ= Ġclock . instant () ĊĠĠĠĠĠĠĠ Ġval Ġzone Ġ= Ġclock . zone ĊĠĠĠĠĠĠĠ Ġval Ġz onedDateTime Ġ= ĠZ onedDateTime . of Instant ( now , Ġzone ) ĊĠĠĠĠĠĠĠ Ġval Ġformatted DateTime Ġ= ĠDateTime Formatter . ISO _ OFFSET _ DATE _ TIME . format ( zon ed DateTime ) ĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġformatted DateTime . replace (' :', Ġ'- '). replace ('.', Ġ'-') Ġ+ Ġ"- $ name " ĊĠĠĠĠĠĠĠ Ġval Ġlog File Ġ= Ġpath . resolve ( fileName ) ĊĠĠĠĠĠĠĠ Ġval Ġinitialize : Ġ() Ġ-> ĠUnit Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiles . create Directories ( path ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠLine Emit ting And File Logger ( initialize , Ġemit , Ġfiles , Ġlog File ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcreate Log Group ( base Dir : ĠPath ): ĠLog Group Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnow Ġ= Ġclock . instant () ĊĠĠĠĠĠĠĠ Ġval Ġzone Ġ= Ġclock . zone ĊĠĠĠĠĠĠĠ Ġval Ġz onedDateTime Ġ= ĠZ onedDateTime . of Instant ( now , Ġzone ) ĊĠĠĠĠĠĠĠ Ġval Ġformatted DateTime Ġ= ĠDateTime Formatter . ISO _ OFFSET _ DATE _ TIME . format ( zon ed DateTime ) ĊĠĠĠĠĠĠĠ Ġval Ġlog Dir Ġ= Ġbase Dir . resolve ( formatted DateTime . replace (' :', Ġ'- '). replace ('.', Ġ'- ')) ĊĠĠĠĠĠĠĠ Ġreturn ĠLog Group ( emit , Ġfiles , Ġlog Dir ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinstance Default Zone : ĠLoggerFactory Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġclock : ĠClock Ġ= ĠClock . system Default Zone () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfiles : ĠFiles Contract Ġ= ĠFiles Delegate ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġemit : Ġ( String ) Ġ-> ĠUnit Ġ= Ġ:: println ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLoggerFactory ( clock , Ġfiles , Ġemit ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ