1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889moduletypeMyLOG=sigincludeLogs.LOGvalsrc:Logs.srcendletstamp_tag:Mtime.spanLogs.Tag.def=Logs.Tag.def"stamp"~doc:"Relative monotonic time stamp"Mtime.Span.ppletstampc=Logs.Tag.(empty|>addstamp_tag(Mtime_clock.countc))letlog_pairs~srclevelf=Logs.msg~srclevel(funm->f(funfmt(f1,arg1)(f2,arg2)->mfmt(f1arg1)(f2arg2)))letmy_reporter~appppf=letnew_reportsrclevel~overkmsgf=letk_=over();k()inmatchlevelwith|Logs.App->msgf@@fun?header?tagsfmt->let_=tagsin(* in order to get rid of the tags unused variable warning *)Fmt.kpfkppf("%a@["^^fmt^^"@]@.")Logs_fmt.pp_header(level,header)|Logs.Error|Logs.Warning->msgf@@fun?header?tagsfmt->let_=tagsin(* in order to get rid of the tags unused variable warning *)Fmt.kpfkppf("%a @["^^fmt^^"@]@.")Logs_fmt.pp_header(level,header)|_->letp1,p2=if(src=Logs.default)||(String.trim(Logs.Src.namesrc)="")then(app,"")else(app^"/",Logs.Src.namesrc)inletwith_srchtagskppffmt=letstamp=matchtagswith|None->None|Sometags->Logs.Tag.findstamp_tagtagsinmatchstampwith|None->Fmt.kpfkppf("%a%a: %a @["^^fmt^^"@]@.")Fmt.(styled`Magentastring)p1Fmt.(styled`Magentastring)p2Logs_fmt.pp_header(level,h)|Somes->Fmt.kpfkppf("%a%a: %a[%a] @["^^fmt^^"@]@.")Fmt.(styled`Magentastring)p1Fmt.(styled`Magentastring)p2Logs_fmt.pp_header(level,h)Mtime.Span.ppsinmsgf@@fun?header?tagsfmt->with_srcheadertagskppffmtin{Logs.report=new_report}letsetup_log~appstyle_rendererlevel=Fmt_tty.setup_std_outputs~utf_8:true~style_renderer();Logs.set_levellevel;Logs.set_reporter(my_reporter~appFormat.std_formatter);()letset_level~app?(colored=true)l=lettt=matchcoloredwithtrue->`Ansi_tty|false->`Noneinsetup_log~apptt(Somel)moduleMake(I:sigvalname:stringend)=structletdoc=Printf.sprintf"logs ACGtkLib %s events"I.nameletsrc=Logs.Src.create~docI.namemoduleLog=(valLogs.src_logsrc)includeLogend