/* ĊĊĠĠ ĠCopyright Ġ 2 0 2 1 ĠMichael ĠStr asser . ĊĊĠĠ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); ĊĠĠ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . ĊĠĠ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat ĊĊĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 ĊĊĠĠ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware ĊĠĠ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , ĊĠĠ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . ĊĠĠ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand ĊĠĠ Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ċ */ Ċ Ċ package Ġio . k logging . rendering Ċ Ċ import Ġio . k logging . events . Log Event Ċ import Ġio . k logging . syslog Ċ import Ġkotlinx . datetime . Instant Ċ Ċ private Ġconst Ġval ĠG ELF _ TEMPLATE Ġ= ĊĠĠĠ Ġ""" {" version ":" 1 . 1 "," host ":" {{ HOST }} "," short _ message ":" {{ SHORT }} ", {{ EX }}" timestamp ": {{ TS }}, " level ": {{ LEVEL }},{{ ITEMS }}} """ Ċ private Ġconst Ġval ĠSTACK _ TEMPLATE Ġ= Ġ""" " full _ message ":" {{ ST }} ", """ Ċ Ċ /** Ċ Ġ* ĠR enders Ġa Ġ[ Log Event ] Ġinto Ġ[ G ELF ]( https :// docs . gray log . org / en / latest / pages / ge lf . html # ge lf - payload - specification ) Ċ Ġ* ĠJSON Ġformat . Ċ Ġ* Ċ Ġ* ĠIt Ġuses Ġvery Ġcr ude Ġstring Ġtemplates Ġbecause ĠJSON Ġserial isation Ġis Ċ Ġ* Ġunable Ġto Ġconvert Ġan Ġ[ Instant ] Ġinto Ġa Ġnumber Ġin Ġ` ssss ssss ssss . nn nn nn nn n ` Ċ Ġ* Ġformat Ġas Ġrequired Ġfor ĠG ELF . Ċ Ġ*/ Ċ public Ġval ĠR ENDER _ G ELF : ĠRender String Ġ= Ġ{ Ġe : ĠLog Event Ġ-> ĊĠĠĠ Ġval Ġexception Ġ= Ġe . stack Trace ?. let Ġ{ Ġformat StackTrace ( it ) Ġ} Ġ?: Ġ"" ĊĠĠĠ Ġval Ġitems Json Ġ= Ġ( e . items Ġ+ Ġmap Of (" logger " Ġto Ġe . logger )) ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġ( k , Ġv ) Ġ-> Ġ""" " _$ k ":" $ v """" Ġ} ĊĠĠĠĠĠĠĠ Ġ. join ToString (",") ĊĊĠĠĠ ĠG ELF _ TEMPLATE ĊĠĠĠĠĠĠĠ Ġ. replace (" {{ HOST }} ", Ġe . host ) ĊĠĠĠĠĠĠĠ Ġ. replace (" {{ SHORT }} ", Ġe . message ) ĊĠĠĠĠĠĠĠ Ġ. replace (" {{ EX }} ", Ġexception ) ĊĠĠĠĠĠĠĠ Ġ. replace (" {{ TS }} ", Ġe . timestamp . gray log Format ()) ĊĠĠĠĠĠĠĠ Ġ. replace (" {{ LEVEL }} ", Ġe . level . syslog . toString ()) ĊĠĠĠĠĠĠĠ Ġ. replace (" {{ ITEMS }} ", Ġitems Json ) Ċ } Ċ Ċ private Ġfun Ġformat StackTrace ( stack Trace : ĠString ) Ġ= ĠSTACK _ TEMPLATE ĊĠĠĠ Ġ. replace (" {{ ST }} ", Ġstack Trace ) Ċ Ċ public Ġfun ĠInstant . gray log Format (): ĠString Ġ{ ĊĠĠĠ Ġval Ġns Ġ= Ġ" 0 0 0 0 0 0 0 0 0 $ nan oseconds Of Second " ĊĠĠĠ Ġreturn Ġ"$ epoch Seconds .${ ns . substring ( ns . length Ġ- Ġ 9 )}" Ċ } Ċ