package Ġkr . j ade kim . logger Ċ Ċ import Ġco . touch lab . state ly . collections . Shared HashMap Ċ import Ġkr . j ade kim . logger . option . J Logger Option Provider Ċ import Ġkr . j ade kim . logger . pipeline .* Ċ Ċ @ Suppress (" VARIABLE _ IN _ SINGLE TON _ WITHOUT _ THREAD _ LOCAL ") Ċ object ĠJ Log Ġ{ ĊĊĠĠĠ Ġvar Ġlogger Level Ġ= ĠLogLevel . INFO ĊĠĠĠ Ġvar Ġpipeline : ĠMutable List < J Log Pipe > Ġ= Ġmutable ListOf ( ĊĠĠĠĠĠĠĠ ĠLogger Name Short er (), ĊĠĠĠĠĠĠĠ ĠText Formatter (), ĊĠĠĠĠĠĠĠ ĠStd Out Printer (), ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġvar Ġoption Provider Ġ= ĠJ Logger Option Provider . builder (). build () ĊĊĠĠĠ Ġprivate Ġval Ġlog gers Ġ= ĠShared HashMap < String , ĠJ Logger >() ĊĊĠĠĠ Ġfun Ġget ( name : ĠString ): ĠJ Logger Ġ= Ġlog gers . get Or Put ( name ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoption Ġ= Ġoption Provider [ name ] ĊĊĠĠĠĠĠĠĠ ĠJ Logger ( name , Ġoption . level , Ġoption . pipeline ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinstall Pipe ( var arg Ġpipe : ĠJ Log Pipe ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpipe . forEach Ġ{ Ġit . install ( pipeline , Ġpipeline . size ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< Pipe Ġ: ĠJ Log Pipe > Ġinstall Pipe Before ( reference : ĠJ Log Pipe . Key < Pipe >, Ġpipe : ĠPipe ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġpipeline . indexOf First Ġ{ Ġit Ġ== Ġreference Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpipe . install ( pipeline , Ġindex ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< Pipe Ġ: ĠJ Log Pipe > Ġinstall Pipe After ( reference : ĠJ Log Pipe . Key < Pipe >, Ġpipe : ĠPipe ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġpipeline . indexOf First Ġ{ Ġit . key Ġ== Ġreference Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( index Ġ== Ġ- 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex Ġ= Ġpipeline . size ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpipe . install ( pipeline , Ġindex ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< Pipe Ġ: ĠJ Log Pipe > Ġuninstall Pipe ( pipe Key : ĠJ Log Pipe . Key < Pipe >) Ġ{ ĊĠĠĠĠĠĠĠ Ġpipeline . removeAll Ġ{ Ġit . key Ġ== Ġpipe Key Ġ} ĊĠĠĠ Ġ} Ċ }