namespace Logger open System.Collections.Generic open Logger.Types type internal Listeners () = let monitor = obj () let listeners = List () member this.Add (listener : IListener) = lock monitor ( fun () -> if not <| listeners.Contains listener then listeners.Add listener ) member this.Remove (listener : IListener) = lock monitor ( fun () -> listeners.Remove listener |> ignore ) member this.NewEntry (message : Message) = lock monitor ( fun () -> if listeners.Count > 0 then let header = Utils.formatHeader message for listener in listeners do listener.NewEntry message.Severity header message.Message )