--- /dev/null
+namespace Logger
+
+open System.Collections.Generic
+
+open Logger.Types
+
+type internal Listeners () =
+ let monitor = obj ()
+
+ let listeners = List<IListener> ()
+
+ 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
+ )
\ No newline at end of file