/* ĊĊĠĠ Ġ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 . config Ċ Ċ import Ġio . k logging . Level Ċ import Ġio . k logging . Level . INFO Ċ import Ġio . k logging . Level . NONE Ċ import Ġio . k logging . internal . K logging Engine Ċ import Ġio . k logging . internal . info Ċ import Ġio . k logging . internal . warn Ċ import Ġio . k logging . rendering . Render String Ċ import Ġio . k logging . sending . Event Sender Ċ import Ġio . k logging . sending . Send String Ċ Ċ /** Ċ Ġ* ĠSet Ġthe Ġdefault ĠK logging Ġlog Ġlevel Ġfrom Ġthe Ġenvironment Ġusing Ġname Ċ Ġ* Ġ[ ENV _ K LOG GING _ MIN _ LOG _ LEVEL ] Ġif Ġpresent , Ġelse Ġdefault Ġto Ġ[ INFO ]. Ċ Ġ*/ Ċ internal Ġval Ġdefault K logging Min LogLevel : ĠLevel Ġ= Ġtry Ġ{ ĊĠĠĠ Ġgetenv ( ENV _ K LOG GING _ MIN _ LOG _ LEVEL )?. let Ġ{ ĠLevel . valueOf ( it ) Ġ} Ġ?: ĠINFO Ċ } Ġcatch Ġ(_ : ĠThrowable ) Ġ{ ĊĠĠĠ ĠINFO Ċ } Ċ Ċ /** Ċ Ġ* ĠRoot ĠDSL Ġfunction Ġfor Ġcreating Ġa Ġ[ K logging Configuration ]. Ċ Ġ* Ċ Ġ* Ġ@ param Ġappend Ġif Ġ` true `, Ġappend Ġthis Ġconfiguration Ġto Ġany Ġexisting Ġone . Ċ Ġ* ĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDefault Ġis Ġ` false `, Ġcausing Ġthis Ġconfiguration Ġreplace Ġany Ġexisting Ġone . Ċ Ġ* Ċ Ġ* Ġ@ param Ġblock ĠDSL Ġfunctions Ġwith Ġvalues Ġto Ġapply Ġto Ġthis Ġconfiguration . Ċ Ġ*/ Ċ @ Config Dsl Ċ public Ġfun Ġlogging Configuration ( append : ĠBoolean Ġ= Ġfalse , Ġblock : ĠK logging Configuration . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠ Ġinfo (" Configuration ", Ġ" Setting Ġconfiguration Ġusing Ġthe ĠDSL Ġwith Ġappend =$ append ") ĊĠĠĠ Ġval Ġconfig Ġ= ĠK logging Configuration () ĊĠĠĠ Ġconfig . apply ( block ) ĊĠĠĠ Ġconfig . validate Sink s () ĊĠĠĠ Ġif Ġ( append ) ĠK logging Engine . append Config ( config ) ĊĠĠĠ Ġelse ĠK logging Engine . set Config ( config ) Ċ } Ċ Ċ /** Ċ Ġ* ĠK logging Ġconfiguration Ġfor Ġa Ġruntime . Ċ Ġ*/ Ċ public Ġclass ĠK logging Configuration Ġ{ ĊĊĠĠĠ Ġinternal Ġval Ġsink s Ġ= Ġmutable Map Of < String , ĠS ink Configuration >() ĊĠĠĠ Ġinternal Ġval Ġconfigs Ġ= Ġmutable ListOf < Logging Config >() ĊĊĠĠĠ Ġinternal Ġvar Ġk logging Min LogLevel : ĠLevel Ġ= Ġdefault K logging Min LogLevel ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDSL Ġfunction Ġto Ġset Ġminimum Ġlogging Ġlevel Ġfor ĠK logging Ġitself . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Config Dsl ĊĠĠĠ Ġpublic Ġfun Ġk logging Min Level ( min Level : ĠLevel ) Ġ{ ĊĠĠĠĠĠĠĠ Ġk logging Min LogLevel Ġ= Ġmin Level ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDSL Ġfunction Ġto Ġspecify Ġa Ġsink Ġwhere Ġlog Ġevents Ġcan Ġbe Ġdis patched . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsink Name Ġname Ġused Ġto Ġrefer Ġto Ġthe Ġsink ĊĠĠĠĠ Ġ* Ġ@ param Ġsink Config Ġconfiguration Ġto Ġuse ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Config Dsl ĊĠĠĠ Ġpublic Ġfun Ġsink ( sink Name : ĠString , Ġsink Config : ĠS ink Configuration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsink s [ sink Name ] Ġ= Ġsink Config ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDSL Ġfunction Ġto Ġspecify Ġa Ġsink Ġwhere Ġlog Ġevents Ġcan Ġbe Ġdis patched . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġsink Name Ġname Ġused Ġto Ġrefer Ġto Ġthe Ġsink ĊĠĠĠĠ Ġ* Ġ@ param Ġrenderer Ġobject Ġthat Ġrenders Ġan Ġevent Ġinto Ġa Ġstring ĊĠĠĠĠ Ġ* Ġ@ param Ġsender Ġobject Ġthat Ġsends Ġan Ġevent Ġas Ġstring Ġsomewhere ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Config Dsl ĊĠĠĠ Ġpublic Ġfun Ġsink ( sink Name : ĠString , Ġrenderer : ĠRender String , Ġsender : ĠSend String ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsink s [ sink Name ] Ġ= ĠS ink Configuration ( renderer , Ġsender ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Config Dsl ĊĠĠĠ Ġpublic Ġfun Ġsink ( sink Name : ĠString , Ġevent Sender : ĠEvent Sender ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsink s [ sink Name ] Ġ= ĠS ink Configuration ( event Sender Ġ= Ġevent Sender ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDSL Ġfunction Ġto Ġadd Ġa Ġlogging Ġconfiguration Ġspecified Ġin Ġ[ config Block ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Config Dsl ĊĠĠĠ Ġpublic Ġfun Ġlogging ( config Block : ĠLogging Config . () Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogging Config Ġ= ĠLogging Config () ĊĠĠĠĠĠĠĠ Ġlogging Config . apply ( config Block ) ĊĠĠĠĠĠĠĠ Ġconfigs . add ( logging Config ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠCalculate Ġthe Ġminimum Ġlevel Ġof Ġall Ġlevel Ġranges Ġin Ġall Ġconfigurations . Ġ*/ ĊĠĠĠ Ġpublic Ġfun Ġminimum Level Of ( logger Name : ĠString ): ĠLevel Ġ= Ġconfigs ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . name Matcher ( logger Name ) Ġ} ĊĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . ranges Ġ} ĊĠĠĠĠĠĠĠ Ġ. min Of OrNull Ġ{ Ġit . min Level Ġ} Ġ?: ĠNONE ĊĊĠĠĠ Ġ/** ĠValidate Ġthat Ġsink s Ġreferred Ġto Ġin Ġlogging Ġconfigurations Ġhave Ġbeen Ġdefined . Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġvalidate Sink s () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġlogging Sink s Ġ= Ġconfigs ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . ranges Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ Ġit . sink Names Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. toSet () ĊĠĠĠĠĠĠĠ Ġval Ġextra Sink s Ġ= Ġlogging Sink s Ġ- Ġsink s . keys ĊĠĠĠĠĠĠĠ Ġextra Sink s . forEach Ġ{ Ġwarn (" Configuration ", Ġ" Sink Ġ`$ it ` Ġwas Ġnot Ġdefined Ġand Ġwill Ġbe Ġignored ") Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAppend Ġanother Ġconfiguration Ġto Ġthis Ġone . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ* Ġ` sink s ` Ġare Ġcombined : Ġany Ġwith Ġthe Ġsame Ġname Ġreplace Ġthose Ġin Ġthis Ġconfig . ĊĠĠĠĠ Ġ* Ġ* Ġ` configs ` Ġare Ġappended Ġto Ġthose Ġin Ġthis Ġconfig . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinternal Ġfun Ġappend ( other : ĠK logging Configuration ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsink s . put All ( other . sink s ) ĊĠĠĠĠĠĠĠ Ġconfigs . addAll ( other . configs ) ĊĠĠĠĠĠĠĠ Ġif Ġ( k logging Min LogLevel Ġ> Ġother . k logging Min LogLevel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġk logging Min LogLevel Ġ= Ġother . k logging Min LogLevel ĊĠĠĠ Ġ} Ċ } Ċ