package Ġorg . slf 4 j . impl Ċ Ċ import Ġorg . slf 4 j . Logger Ċ import Ġorg . slf 4 j . Marker Ċ import Ġjava . io . Print Stream Ċ import Ġkotlinx . serialization . json .* Ċ import Ġjava . io . PrintWriter Ċ import Ġjava . io . String Writer Ċ import Ġjava . time . Instant ĊĊ Ċ class ĠJson Logger ( ĊĠ Ġprivate Ġval Ġlogger Name : ĠString , ĊĠ Ġprivate Ġval Ġmin Level : ĠLogLevel , ĊĠ Ġprivate Ġval Ġout : ĠPrint Stream Ġ= ĠSystem . out Ċ ) Ġ: ĠLogger Ġ{ ĊĊĠ Ġprivate Ġval Ġjson Ġ= ĠJson ( Json Configuration . Stable ) ĊĊĠ Ġprivate Ġfun Ġlog ( level : ĠLogLevel , Ġmessage : ĠString , Ġthrowable : ĠThrowable ) Ġ{ ĊĠĠĠ Ġval Ġstack Trace Ġ= ĠString Writer (). let Ġ{ ĊĠĠĠĠĠ Ġthrowable . printStackTrace ( PrintWriter ( it )) ĊĠĠĠĠĠ ĠtoString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġjson Message Ġ= Ġjson Ġ{ ĊĠĠĠĠĠ Ġ" message " Ġto Ġmessage ĊĠĠĠĠĠ Ġ" level " Ġto Ġlevel . name . toLowerCase () ĊĠĠĠĠĠ Ġ" exception Message " Ġto Ġthrowable . message ĊĠĠĠĠĠ Ġ" stack Trace " Ġto Ġstack Trace ĊĠĠĠĠĠ Ġ" timestamp " Ġto ĠInstant . now (). toString () ĊĠĠĠĠĠ Ġ" source " Ġto Ġlogger Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġjson Data Ġ= Ġjson . stringify ( JsonObject . serializer (), Ġjson Message ) ĊĠĠĠ Ġout . println ( json Data ) ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġlog ( level : ĠLogLevel , Ġmessage : ĠString ) Ġ{ ĊĠĠĠ Ġval Ġjson Message Ġ= Ġjson Ġ{ ĊĠĠĠĠĠ Ġ" message " Ġto Ġmessage ĊĠĠĠĠĠ Ġ" level " Ġto Ġlevel . name . toLowerCase () ĊĠĠĠĠĠ Ġ" timestamp " Ġto ĠInstant . now (). toString () ĊĠĠĠĠĠ Ġ" source " Ġto Ġlogger Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġjson Data Ġ= Ġjson . stringify ( JsonObject . serializer (), Ġjson Message ) ĊĠĠĠ Ġout . println ( json Data ) ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠgetName () Ġ= Ġlogger Name ĊĊĠ Ġoverride Ġfun Ġis Warn Enabled () Ġ= Ġmin Level Ġ>= ĠLogLevel . Warn ĊĠ Ġoverride Ġfun Ġis Warn Enabled ( marker : ĠMarker ?) Ġ= Ġis Warn Enabled () ĊĠ Ġoverride Ġfun Ġwarn ( msg : ĠString ) Ġ= Ġlog ( LogLevel . Warn , Ġmsg ) ĊĠ Ġoverride Ġfun Ġwarn ( format : ĠString , Ġarg : ĠAny ?) Ġ= Ġlog ( LogLevel . Warn , Ġformat . format ( arg )) ĊĠ Ġoverride Ġfun Ġwarn ( format : ĠString , Ġvar arg Ġarguments : ĠAny ?) Ġ= Ġlog ( LogLevel . Warn , Ġformat . format (* arguments )) ĊĠ Ġoverride Ġfun Ġwarn ( format : ĠString , Ġarg 1 : ĠAny ?, Ġarg 2 : ĠAny ?) Ġ= Ġlog ( LogLevel . Warn , Ġformat . format ( arg 1 , Ġarg 2 )) ĊĠ Ġoverride Ġfun Ġwarn ( msg : ĠString , Ġt : ĠThrowable ) Ġ= Ġlog ( LogLevel . Warn , Ġmsg , Ġt ) ĊĠ Ġoverride Ġfun Ġwarn ( marker : ĠMarker ?, Ġmsg : ĠString ) Ġ= Ġlog ( LogLevel . Warn , Ġmsg ) ĊĠ Ġoverride Ġfun Ġwarn ( marker : ĠMarker ?, Ġformat : ĠString , Ġarg : ĠAny ?) Ġ= Ġlog ( LogLevel . Warn , Ġformat . format ( arg )) ĊĠ Ġoverride Ġfun Ġwarn ( marker : ĠMarker ?, Ġformat : ĠString , Ġarg 1 : ĠAny ?, Ġarg 2 : ĠAny ?) Ġ= Ġlog ( LogLevel . Warn , Ġformat . format ( arg 1 , Ġarg 2 )) ĊĠ Ġoverride Ġfun Ġwarn ( marker : ĠMarker ?, Ġformat : ĠString , Ġvar arg Ġarguments : ĠAny ?) Ġ= Ġlog ( LogLevel . Warn , Ġformat . format (* arguments )) ĊĠ Ġoverride Ġfun Ġwarn ( marker : ĠMarker ?, Ġmsg : ĠString , Ġt : ĠThrowable ) Ġ= Ġlog ( LogLevel . Warn , Ġmsg , Ġt ) ĊĊĠ Ġoverride Ġfun Ġis Info Enabled () Ġ= Ġmin Level Ġ>= ĠLogLevel . Info ĊĠ Ġoverride Ġfun Ġis Info Enabled ( marker : ĠMarker ?) Ġ= Ġis Info Enabled () ĊĠ Ġoverride Ġfun Ġinfo ( msg : ĠString ) Ġ= Ġlog ( LogLevel . Info , Ġmsg ) ĊĠ Ġoverride Ġfun Ġinfo ( format : ĠString , Ġarg : ĠAny ?) Ġ= Ġlog ( LogLevel . Info , Ġformat . format ( arg )) ĊĠ Ġoverride Ġfun Ġinfo ( format : ĠString , Ġvar arg Ġarguments : ĠAny ?) Ġ= Ġlog ( LogLevel . Info , Ġformat . format (* arguments )) ĊĠ Ġoverride Ġfun Ġinfo ( format : ĠString , Ġarg 1 : ĠAny ?, Ġarg 2 : ĠAny ?) Ġ= Ġlog ( LogLevel . Info , Ġformat . format ( arg 1 , Ġarg 2 )) ĊĠ Ġoverride Ġfun Ġinfo ( msg : ĠString , Ġt : ĠThrowable ) Ġ= Ġlog ( LogLevel . Info , Ġmsg , Ġt ) ĊĠ Ġoverride Ġfun Ġinfo ( marker : ĠMarker ?, Ġmsg : ĠString ) Ġ= Ġlog ( LogLevel . Info , Ġmsg ) ĊĠ Ġoverride Ġfun Ġinfo ( marker : ĠMarker ?, Ġformat : ĠString , Ġarg : ĠAny ?) Ġ= Ġlog ( LogLevel . Info , Ġformat . format ( arg )) ĊĠ Ġoverride Ġfun Ġinfo ( marker : ĠMarker ?, Ġformat : ĠString , Ġarg 1 : ĠAny ?, Ġarg 2 : ĠAny ?) Ġ= Ġlog ( LogLevel . Info , Ġformat . format ( arg 1 , Ġarg 2 )) ĊĠ Ġoverride Ġfun Ġinfo ( marker : ĠMarker ?, Ġformat : ĠString , Ġvar arg Ġarguments : ĠAny ?) Ġ= Ġlog ( LogLevel . Info , Ġformat . format (* arguments )) ĊĠ Ġoverride Ġfun Ġinfo ( marker : ĠMarker ?, Ġmsg : ĠString , Ġt : ĠThrowable ) Ġ= Ġlog ( LogLevel . Info , Ġmsg , Ġt ) ĊĊĠ Ġoverride Ġfun Ġis Error Enabled () Ġ= Ġmin Level Ġ>= ĠLogLevel . Error ĊĠ Ġoverride Ġfun Ġis Error Enabled ( marker : ĠMarker ?) Ġ= Ġis Error Enabled () ĊĠ Ġoverride Ġfun Ġerror ( msg : ĠString ) Ġ= Ġlog ( LogLevel . Error , Ġmsg ) ĊĠ Ġoverride Ġfun Ġerror ( format : ĠString , Ġarg : ĠAny ?) Ġ= Ġlog ( LogLevel . Error , Ġformat . format ( arg )) ĊĠ Ġoverride Ġfun Ġerror ( format : ĠString , Ġvar arg Ġarguments : ĠAny ?) Ġ= Ġlog ( LogLevel . Error , Ġformat . format (* arguments )) ĊĠ Ġoverride Ġfun Ġerror ( format : ĠString , Ġarg 1 : ĠAny ?, Ġarg 2 : ĠAny ?) Ġ= Ġlog ( LogLevel . Error , Ġformat . format ( arg 1 , Ġarg 2 )) ĊĠ Ġoverride Ġfun Ġerror ( msg : ĠString , Ġt : ĠThrowable ) Ġ= Ġlog ( LogLevel . Error , Ġmsg , Ġt ) ĊĠ Ġoverride Ġfun Ġerror ( marker : ĠMarker ?, Ġmsg : ĠString ) Ġ= Ġlog ( LogLevel . Error , Ġmsg ) ĊĠ Ġoverride Ġfun Ġerror ( marker : ĠMarker ?, Ġformat : ĠString , Ġarg : ĠAny ?) Ġ= Ġlog ( LogLevel . Error , Ġformat . format ( arg )) ĊĠ Ġoverride Ġfun Ġerror ( marker : ĠMarker ?, Ġformat : ĠString , Ġarg 1 : ĠAny ?, Ġarg 2 : ĠAny ?) Ġ= Ġlog ( LogLevel . Error , Ġformat . format ( arg 1 , Ġarg 2 )) ĊĠ Ġoverride Ġfun Ġerror ( marker : ĠMarker ?, Ġformat : ĠString , Ġvar arg Ġarguments : ĠAny ?) Ġ= Ġlog ( LogLevel . Error , Ġformat . format (* arguments )) ĊĠ Ġoverride Ġfun Ġerror ( marker : ĠMarker ?, Ġmsg : ĠString , Ġt : ĠThrowable ) Ġ= Ġlog ( LogLevel . Error , Ġmsg , Ġt ) ĊĊĠ Ġoverride Ġfun Ġis Debug Enabled () Ġ= Ġmin Level Ġ>= ĠLogLevel . Debug ĊĠ Ġoverride Ġfun Ġis Debug Enabled ( marker : ĠMarker ?) Ġ= Ġis Debug Enabled () ĊĠ Ġoverride Ġfun Ġdebug ( msg : ĠString ) Ġ= Ġlog ( LogLevel . Debug , Ġmsg ) ĊĠ Ġoverride Ġfun Ġdebug ( format : ĠString , Ġarg : ĠAny ?) Ġ= Ġlog ( LogLevel . Debug , Ġformat . format ( arg )) ĊĠ Ġoverride Ġfun Ġdebug ( format : ĠString , Ġvar arg Ġarguments : ĠAny ?) Ġ= Ġlog ( LogLevel . Debug , Ġformat . format (* arguments )) ĊĠ Ġoverride Ġfun Ġdebug ( format : ĠString , Ġarg 1 : ĠAny ?, Ġarg 2 : ĠAny ?) Ġ= Ġlog ( LogLevel . Debug , Ġformat . format ( arg 1 , Ġarg 2 )) ĊĠ Ġoverride Ġfun Ġdebug ( msg : ĠString , Ġt : ĠThrowable ) Ġ= Ġlog ( LogLevel . Debug , Ġmsg , Ġt ) ĊĠ Ġoverride Ġfun Ġdebug ( marker : ĠMarker ?, Ġmsg : ĠString ) Ġ= Ġlog ( LogLevel . Debug , Ġmsg ) ĊĠ Ġoverride Ġfun Ġdebug ( marker : ĠMarker ?, Ġformat : ĠString , Ġarg : ĠAny ?) Ġ= Ġlog ( LogLevel . Debug , Ġformat . format ( arg )) ĊĠ Ġoverride Ġfun Ġdebug ( marker : ĠMarker ?, Ġformat : ĠString , Ġarg 1 : ĠAny ?, Ġarg 2 : ĠAny ?) Ġ= Ġlog ( LogLevel . Debug , Ġformat . format ( arg 1 , Ġarg 2 )) ĊĠ Ġoverride Ġfun Ġdebug ( marker : ĠMarker ?, Ġformat : ĠString , Ġvar arg Ġarguments : ĠAny ?) Ġ= Ġlog ( LogLevel . Debug , Ġformat . format (* arguments )) ĊĠ Ġoverride Ġfun Ġdebug ( marker : ĠMarker ?, Ġmsg : ĠString , Ġt : ĠThrowable ) Ġ= Ġlog ( LogLevel . Debug , Ġmsg , Ġt ) ĊĊĠ Ġoverride Ġfun Ġis Trace Enabled () Ġ= Ġmin Level Ġ>= ĠLogLevel . Trace ĊĠ Ġoverride Ġfun Ġis Trace Enabled ( marker : ĠMarker ?) Ġ= Ġis Trace Enabled () ĊĠ Ġoverride Ġfun Ġtrace ( msg : ĠString ) Ġ= Ġlog ( LogLevel . Trace , Ġmsg ) ĊĠ Ġoverride Ġfun Ġtrace ( format : ĠString , Ġarg : ĠAny ?) Ġ= Ġlog ( LogLevel . Trace , Ġformat . format ( arg )) ĊĠ Ġoverride Ġfun Ġtrace ( format : ĠString , Ġvar arg Ġarguments : ĠAny ?) Ġ= Ġlog ( LogLevel . Trace , Ġformat . format (* arguments )) ĊĠ Ġoverride Ġfun Ġtrace ( format : ĠString , Ġarg 1 : ĠAny ?, Ġarg 2 : ĠAny ?) Ġ= Ġlog ( LogLevel . Trace , Ġformat . format ( arg 1 , Ġarg 2 )) ĊĠ Ġoverride Ġfun Ġtrace ( msg : ĠString , Ġt : ĠThrowable ) Ġ= Ġlog ( LogLevel . Trace , Ġmsg , Ġt ) ĊĠ Ġoverride Ġfun Ġtrace ( marker : ĠMarker ?, Ġmsg : ĠString ) Ġ= Ġlog ( LogLevel . Trace , Ġmsg ) ĊĠ Ġoverride Ġfun Ġtrace ( marker : ĠMarker ?, Ġformat : ĠString , Ġarg : ĠAny ?) Ġ= Ġlog ( LogLevel . Trace , Ġformat . format ( arg )) ĊĠ Ġoverride Ġfun Ġtrace ( marker : ĠMarker ?, Ġformat : ĠString , Ġarg 1 : ĠAny ?, Ġarg 2 : ĠAny ?) Ġ= Ġlog ( LogLevel . Trace , Ġformat . format ( arg 1 , Ġarg 2 )) ĊĠ Ġoverride Ġfun Ġtrace ( marker : ĠMarker ?, Ġformat : ĠString , Ġvar arg Ġarguments : ĠAny ?) Ġ= Ġlog ( LogLevel . Trace , Ġformat . format (* arguments )) ĊĠ Ġoverride Ġfun Ġtrace ( marker : ĠMarker ?, Ġmsg : ĠString , Ġt : ĠThrowable ) Ġ= Ġlog ( LogLevel . Trace , Ġmsg , Ġt ) Ċ } Ċ