/// <summary>
        /// Adds a listener
        /// </summary>
        /// <param name="target">Target output device</param>
        /// <param name="options">Filtration options</param>
        /// <param name="filterItems">Keywords to filter out (or include)</param>
        public void AddListener(IConsoleOutput target, RouterOptions options, IEnumerable <string> filterItems)
        {
            if (TargetsInternal.Where(i => i.Target == target).Count() > 0)
            {
                throw new ArgumentException(nameof(target), "This " + nameof(IConsoleOutput) + " is allready registered");
            }

            if (!options.HasFlag(RouterOptions.ReceivesErrors) && !options.HasFlag(RouterOptions.ReceivesWarnings) && !options.HasFlag(RouterOptions.ReceivesMessages))
            {
                throw new ArgumentException(nameof(options), "This listener has no target streams");
            }

            TargetsInternal.Add(new RouterItem()
            {
                Target = target, Options = options, ExcludedKeywords = filterItems.ToArray()
            });
        }
 /// <summary>
 /// Writes a message to all listeners that has the option flag ReceiveMessages
 /// </summary>
 /// <param name="message">Message to write</param>
 public void WriteLine(string message)
 {
     TargetsInternal.ForEach(i => i.WriteLine(message));
 }
 /// <summary>
 /// Clears the buffers of all listeners that has the option flag CanClear
 /// </summary>
 public void ClearBuffer()
 {
     TargetsInternal.ForEach(i => i.ClearBuffer());
 }
 /// <summary>
 /// Removes a listener
 /// </summary>
 /// <param name="target">Listener to remove</param>
 /// <returns></returns>
 public bool RemoveListener(IConsoleOutput target)
 {
     return(TargetsInternal.RemoveAll(i => i.Target == target) != 0);
 }
 /// <summary>
 /// Writes an warning message to all listeners that has the option flag ReceiveWarnings
 /// </summary>
 /// <param name="message">Message to write</param>
 public void WriteWarning(string message)
 {
     TargetsInternal.ForEach(i => i.WriteWarning(message));
 }