Exemplo n.º 1
0
        public ShareAsaleService(ShareAsaleSettings _s, BaseLogger logger)
        {
            settings = _s;
            _l       = logger;

            ServiceStatus = BaseServicesStatuses.ServiceNotLaunched;
            _tasks        = new List <ShareAsaleLinkEntity>();
            locker        = new object();
            InitTasks();

            var callback = new TimerCallback(Timer_Callback);

            _t = new Timer(callback, null, 0, 2000);
        }
Exemplo n.º 2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="T:SoftplanCalc.Api.Tests.CalculateInterestControllerUnitTest"/> class.
        /// </summary>
        public CalculateInterestControllerUnitTest()
        {
            var configuration = TestHelper.GetIConfiguration(Directory.GetCurrentDirectory());

            var options = new CalculateInterestOptions();
            var section = configuration.GetSection("CalculateInterest");

            section.Bind(options);

            var calculateInsterestService = new CalculateInterestService(options);
            var logger = new BaseLogger();

            _calculateInterestController = new CalculateInterestController(logger, calculateInsterestService);
        }
Exemplo n.º 3
0
        public ChromeDriverResolver(BaseWebDriverStrategy options, WebScrapperBaseProxyEntity _proxy, string url, BaseLogger _logger)
        {
            settings = options;
            _l       = _logger;
            _baseUrl = url;

            _d = new DirectoriesService();
            _f = new FilesWriter();

            _ps = _proxy;

            DriverDependenciesDirectory = $@"{Directory.GetCurrentDirectory()}/Scrapper/Resources/scripts/ChromeDriver/js/";
            DriverResourcesDirectory    = $"{Directory.GetCurrentDirectory()}/Scrapper/Resources/";
            DriverBaseExtensionsPath    = $"{DriverResourcesDirectory}selenium/chrome/proxy.plugin/";
        }
Exemplo n.º 4
0
        public ChatClient()
        {
            logger = LoggerFactory.GetLogger <ChatClient>();
            client = new TCPClient <StreamPacket>(IPAddress.Parse("192.168.1.168"), 3210);

            client.OnConnected      += Client_OnConnected;
            client.OnDisconnected   += Client_OnDisconnected;
            client.OnClientError    += Client_OnClientError;
            client.OnPacketReceived += Client_OnPacketReceived;
            client.OnPacketSent     += Client_OnPacketSent;
            client.OnPingSent       += Client_OnPingSent;
            client.OnPingReceived   += Client_OnPingReceived;
            client.OnPongSent       += Client_OnPongSent;
            client.OnPongReceived   += Client_OnPongReceived;
        }
Exemplo n.º 5
0
        public CommandLineParser(BaseLogger logger, string[] args)
        {
            _logger = logger;

            Queries = new List <string>();
            _allInputSubcommands  = new List <Subcommand>();
            _allOutputSubcommands = new List <Subcommand>();
            _allSubcommandNames   = new List <string>();
            _query = new Option("query", "q",
                                "Optional, apply this KQL query to the input stream. If omitted, the stream is propagated without processing to the output. eg, --query=file.kql");
            _args         = args;
            _currentIndex = 0;

            GetAllSubcommands();
        }
Exemplo n.º 6
0
        public void PopupInternalError()
        {
            var m = new simplewriter {
                timeout = -1
            };
            var logger = new BaseLogger {
                Writers = new[] { m }
            };

            logger.StartWrite(new LogMessage());

            var ex = Assert.Throws <LogException>(() => logger.Join());

            StringAssert.Contains("myerror", ex.InnerException.Message);
        }
Exemplo n.º 7
0
        public void CanThrowTimeOut()
        {
            var m = new simplewriter {
                timeout = 1050
            };
            var logger = new BaseLogger {
                Writers = new[] { m }
            };

            logger.StartWrite(new LogMessage());
            logger.Join();
            logger.StartWrite(new LogMessage());
            var ex = Assert.Throws <LogException>(() => logger.Join());

            StringAssert.Contains("timeout", ex.Message);
        }
Exemplo n.º 8
0
        public Parking(ISettings settings, BaseLogger logger)
        {
            Transactions.CollectionChanged += AddTransaction;

            Settings = settings;
            _logger  = logger;

            parkingPaymentTimer = new Timer((e) =>
            {
                GetPaymentFromCar();
            }, null, TimeSpan.FromSeconds(Settings.Timeout), TimeSpan.FromSeconds(Settings.Timeout));

            logTransactionTimer = new Timer((e) =>
            {
                LogTransactionEveryMinute();
            }, null, TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(10));
        }
Exemplo n.º 9
0
        protected virtual BaseLogger CreateLoggers()
        {
            var ldcConfig = new StringConfig(Args, 0);
            var xmlConfig = new XmlConfig(ConfigFile, 1);

            Configuration = new ConfigPackage();
            Configuration.AddSource(ldcConfig);
            Configuration.AddSource(xmlConfig);

            var log = new MultiLogger();

            ConsoleLogger = new ConsoleLogger(CfgConsole, Configuration);
            FileLogger    = new FileLogger(CfgFile, Configuration);
            log.AddLogger(ConsoleLogger);
            log.AddLogger(FileLogger);

            return(log);
        }
Exemplo n.º 10
0
 public ProxyService(BaseLogger _logger,
                     string proxyFile,
                     string proxyFileLineDelimiter,
                     string proxyFileEntitiesSeparator,
                     int proxyFileHostEntityIndex,
                     int proxyFilePortEntityIndex,
                     int proxyFileLoginIndex,
                     int proxyFilePasswordIndex)
 {
     _f        = new FilesWriter();
     _l        = _logger;
     ProxyFile = proxyFile;
     ProxyFileLineDelimiter     = proxyFileLineDelimiter;
     ProxyFileEntitiesSeparator = proxyFileEntitiesSeparator;
     ProxyFileHostEntityIndex   = proxyFileHostEntityIndex;
     ProxyFilePortEntityIndex   = proxyFilePortEntityIndex;
     ProxyFileLoginIndex        = proxyFileLoginIndex;
     ProxyFilePasswordIndex     = proxyFilePasswordIndex;
 }
Exemplo n.º 11
0
        protected Connector(Configuration config, BaseLogger logger)
        {
            _config         = config;
            _logger         = logger;
            ConnectionState = ConnectionState.Disconnected;
            _msgId          = new IncrementingIndex();

            OnOpen += () =>
            {
                ConnectionState = ConnectionState.Connected;
                _logger.Info($"Connected to {WsUrl}");
            };

            OnClose += () =>
            {
                ConnectionState = ConnectionState.Disconnected;
                _logger.Info("Disconnected");
            };
        }
Exemplo n.º 12
0
        public void IsAsyncButSynchronizable()
        {
            var m      = new simplewriter();
            var logger = new BaseLogger {
                Writers = new[] { m }
            };

            logger.StartWrite(new LogMessage());
            Assert.False(m.called);            //we start write UserLog, but we are async
            logger.Join();
            Assert.True(m.called);             //but here we are guaranted to be synchronized for next run

            // repeat it twice
            m.called = false;

            logger.StartWrite(new LogMessage());
            Assert.False(m.called);            //we start write UserLog, but we are async
            logger.Join();
            Assert.True(m.called);             //but here we are guaranted to be synchronized for next run
        }
Exemplo n.º 13
0
        public static void Log(LogTarget target, string message, ActionType type, string methodName)
        {
            Log log = GenerateLogObject(message, type, methodName);

            switch (target)
            {
            case LogTarget.File:
                logger = new FileLogger();
                logger.Log(log);
                break;

            case LogTarget.Database:
                logger = new DBLogger();
                logger.Log(log);
                break;

            default:
                return;
            }
        }
Exemplo n.º 14
0
 public static void Test(bool comparison, object message = null, params object[] argv)
 {
     if (comparison)
     {
         return;
     }
     if (LogLevel.DEBUG == (BaseLogger.currentLogLevels & LogLevel.DEBUG))
     {
         string messageFormat = "";
         if (message != null)
         {
             messageFormat = BaseLogger.LoggerStringFormat(message.ToString(), argv);
         }
         else
         {
             messageFormat = "comparison not pass!!";
         }
         BaseLogger.Debug("Test + " + messageFormat + " #");
     }
 }
Exemplo n.º 15
0
        public ELOEventHandler(IServiceProvider provider)
        {
            Logger                 = provider.GetService <Logger>() ?? new Logger();
            BaseLogger             = provider.GetService <LogHandler>() ?? new LogHandler();
            Provider               = provider;
            Client                 = provider.GetRequiredService <DiscordShardedClient>();
            CommandService         = provider.GetService <CommandService>() ?? new CommandService();
            ShardChecker           = provider.GetService <ShardChecker>() ?? new ShardChecker(Client);
            ReactiveMessageService = new ReactiveMessageService(Client, ShardChecker, Provider.GetRequiredService <PremiumService>(), Provider.GetRequiredService <UserService>());

            ShardChecker.AllShardsReady += AllShardsReadyAsync;
            Client.ShardConnected       += ShardConnectedAsync;
            Client.ShardReady           += ShardReadyAsync;

            //Set commandschedule variables so they don't need to be injected
            CommandSchedule.Provider = provider;
            CommandSchedule.Service  = provider.GetRequiredService <CommandService>();
            Client.Log         += async x => BaseLogger.Log(x.Message, x.Severity);
            BaseLogger.Message += async(x, y) => Logger.Log(x, y);
        }
Exemplo n.º 16
0
        public virtual void UnLoadConfiguration()
        {
            Log(Strings.UNLOADING_CONFIGURATION, ESeverity.DEBUG);

            if (ConsoleLogger != null)
            {
                ConsoleLogger.Close();
                ConsoleLogger = null;
            }

            if (FileLogger != null)
            {
                FileLogger.Close();
                FileLogger = null;
            }

            GlobalLogger  = null;
            Configuration = null;
            Protocol      = null;
        }
Exemplo n.º 17
0
        /// <summary>
        /// Set output buffer for log
        /// </summary>
        /// <param name="sw">text writer to send messages</param>
        /// <param name="redirect">overrides ConsoleOut</param>
        /// <remarks>test proposal, tend to be moved to Log but now we have ambigous log/loggy infrastructure so it has to manage it itself</remarks>
        public void RedirectLog(TextWriter sw, bool redirect = true)
        {
            Initialize();
            if (null == sw)
            {
                return;
            }

            _redirectconsole = redirect;
            if (null != _redirection)
            {
                if (_redirection == sw)
                {
                    return;
                }
                throw new Exception("already redirected");
            }
            _redirection = sw;
            var lb        = (LoggerBasedUserLog)Log;
            var deflogger = lb.GetLoggers().OfType <BaseLogger>().FirstOrDefault();

            if (null != deflogger)
            {
                _redirectlogger   = deflogger;
                _redirectedWriter = new TextWriterLogWriter(sw)
                {
                    CustomFormat = LogFormat
                };
                _redirectlogger.Writers.Add(_redirectedWriter);
                if (_redirectconsole)
                {
                    _cachedLogWriter = _redirectlogger.Writers.OfType <ConsoleLogWriter>().FirstOrDefault();
                    if (null != _cachedLogWriter)
                    {
                        _cachedLogWriter.Active = false;
                    }
                }
            }
            Loggy.OnChangeManager += OnLoggyManager;
            SetupLoggyRedirection(Loggy.Manager);
        }
Exemplo n.º 18
0
        static BlobOutput GetBlobOutput(BaseLogger logger, List <Option> opts)
        {
            string connectionString = "";
            string containerName    = "";

            foreach (var opt in opts)
            {
                switch (opt.LongName)
                {
                case "blobconnectionstring":
                    connectionString = opt.Value;
                    break;

                case "blobcontainername":
                    containerName = opt.Value;
                    break;
                }
            }

            return(new BlobOutput(logger, connectionString, containerName));
        }
Exemplo n.º 19
0
        internal static BaseLogger CreateInstance(LogElement logElement)
        {
            if (_instance == null)
            {
                Type providerType = Type.GetType(logElement.ProviderType);
                if (providerType == null)
                {
                    throw new InvalidConfigurationException("Could not locate Log Provider :" + logElement.ProviderType);
                }

                if (!providerType.ImplementsClass <BaseLogger>())
                {
                    throw new InvalidConfigurationException("Log Provider does not implement ILogger:" +
                                                            logElement.ProviderType);
                }

                var args = new CommandArgs(logElement.Parameters);
                _instance = (BaseLogger)Activator.CreateInstance(providerType, args);
            }

            return(_instance);
        }
Exemplo n.º 20
0
        /// <summary>
        /// Called only be the main Program. The public static getter for <see cref="Instance"/>
        /// requires that this method has been called before.
        /// </summary>
        /// <param name="configuration"></param>
        public static void Configure(DataFactoryConfiguration configuration)
        {
            DataFactory.logger = configuration.Logger;
            lazySessionFactory = new Lazy <ISessionFactory>(() =>
            {
                var factory = FluentNHibernate.Cfg.Fluently.Configure()
                              .Database(DatabaseTypeWithConnectionStringToConfigurer(configuration))
                              .ExposeConfiguration(config =>
                {
                    config.SetInterceptor(new SqlStatementInterceptor());

                    var update = new NHibernate.Tool.hbm2ddl.SchemaUpdate(config);
                    update.Execute(scripts =>
                    {
                        logger.LogTrace(scripts);
                    }, doUpdate: true);

                    if (update.Exceptions.Count > 0)
                    {
                        foreach (var ex in update.Exceptions)
                        {
                            logger.LogError(ex, $"{ex.Message}\nStacktrace:\n{ex.StackTrace}");
                        }
                        throw new AggregateException("Cannot create/update the DB schema.", update.Exceptions);
                    }
                })
                              .Mappings(mappings =>
                {
                    mappings.FluentMappings
                    .AddFromAssemblyOf <DataFactory>()
                    .Conventions.Add(typeof(IndexedConvention))
                    .Conventions.Add(typeof(ForeignKeyConvention));
                })
                              .BuildSessionFactory();

                return(factory);
            });
        }
Exemplo n.º 21
0
        public static void Log(string message, LogType type)
        {
            switch (type)
            {
            case LogType.File:
                _bl = new FileLogger();
                _bl.Log(message);
                break;

            case LogType.Registry:
                _bl = new RegistryLogger();
                _bl.Log(message);
                break;

            case LogType.EventLog:
                _bl = new EventLogLogger();
                _bl.Log(message);
                break;

            default:
                return;
            }
        }
Exemplo n.º 22
0
 public CollectionsProcessorService(BaseLogger _logger)
 {
     _l = _logger;
     _f = new FilesWriter();
 }
Exemplo n.º 23
0
 public StdConsole(IDependencyContainer container)
 {
     SessionConnectTime = DateTime.UtcNow;
     BaseLogger.SkipTypeFromLogging(GetType());
     Container = container.CreateChildContainer();
 }
Exemplo n.º 24
0
 private void SetBaseLogger(LogLevels logLevel)
 {
     var loggerConfig = MockHelpers.MockLoggerConfig(logLevel);
     _baseLogger = new BaseLogger<WriteParameter>(loggerConfig);
 }
Exemplo n.º 25
0
 private ILogger CreateLogger(string directory, string file)
 {
     return(BaseLogger.CreateLogger(directory, file));
 }
Exemplo n.º 26
0
 public ChatClientWrapper() : base(IPAddress.Parse("127.0.0.1"), 3210)
 {
     logger = LoggerFactory.GetLogger(this);
     RegisterReader(new ChatMessageReader());
 }
Exemplo n.º 27
0
 public void SetSettings(ISettings settings, BaseLogger logger)
 {
     Settings = settings;
     _logger  = logger;
 }
Exemplo n.º 28
0
        public virtual async Task CommandExecutedAsync(Optional <CommandInfo> commandInfo, ICommandContext context, IResult result)
        {
            if (result.IsSuccess)
            {
                BaseLogger.Log(context.Message.Content, context);
            }
            else
            {
                try
                {
                    //Check for if the server has disabled displaying errors
                    if (context.Guild != null)
                    {
                        using (var db = new Database())
                        {
                            var comp = db.GetOrCreateCompetition(context.Guild.Id);
                            if (!comp.DisplayErrors)
                            {
                                return;
                            }
                        }
                    }

                    if (result is ExecuteResult exResult)
                    {
                        BaseLogger.Log($"{context.Message.Content}\n{result.Error}\n{result.ErrorReason}\n{exResult.Exception}", context, LogSeverity.Error);
                        await context.Channel.SendMessageAsync("", false, new EmbedBuilder
                        {
                            Title       = $"Command Execution Error{(result.Error.HasValue ? $": {result.Error.Value}" : "")}",
                            Description = $"Message: {context.Message.Content.FixLength(512)}\n" +
                                          "__**Error**__\n" +
                                          $"{result.ErrorReason.FixLength(512)}\n" +
                                          $"{exResult.Exception}".FixLength(1024),
                            Color = Color.LightOrange
                        }.Build());
                    }
                    else if (result is PreconditionResult preResult)
                    {
                        BaseLogger.Log($"{context.Message.Content}\n{result.Error}\n{result.ErrorReason}", context, LogSeverity.Error);
                        await context.Channel.SendMessageAsync("", false, new EmbedBuilder
                        {
                            Title       = $"Command Precondition Error{(result.Error.HasValue ? $": {result.Error.Value}" : "")}",
                            Description = $"Message: {context.Message.Content.FixLength(512)}\n" +
                                          "__**Error**__\n" +
                                          $"{result.ErrorReason.FixLength(512)}\n".FixLength(1024),
                            Color = Color.LightOrange
                        }.Build());
                    }
                    else if (result is RuntimeResult runResult)
                    {
                        BaseLogger.Log($"{context.Message.Content}\n{result.Error}\n{result.ErrorReason}", context, LogSeverity.Error);

                        //Post execution result. Ie. returned by developer
                        await context.Channel.SendMessageAsync("", false, new EmbedBuilder
                        {
                            Title       = $"Command Runtime Error{(result.Error.HasValue ? $": {result.Error.Value}" : "")}",
                            Description = $"Message: {context.Message.Content.FixLength(512)}\n" +
                                          "__**Error**__\n" +
                                          $"{runResult.Reason.FixLength(512)}\n".FixLength(1024),
                            Color = Color.LightOrange
                        }.Build());
                    }
                    else if (result is SearchResult sResult)
                    {
                        BaseLogger.Log($"{context.Message.Content}\n{result.Error}\n{result.ErrorReason}", context, LogSeverity.Error);

                        //Since it is an error you can assume it's an unknown command as SearchResults will only return an error if not found.
                        var dlDistances = new List <(int, string, CommandInfo)>();
                        foreach (var command in CommandService.Commands)
                        {
                            foreach (var alias in command.Aliases)
                            {
                                var distance = context.Message.Content.DamerauLavenshteinDistance(alias);
                                if (distance == context.Message.Content.Length || distance == alias.Length)
                                {
                                    continue;
                                }

                                dlDistances.Add((distance, alias, command));
                            }
                        }

                        var ordered   = dlDistances.OrderBy(x => x.Item1);
                        var toDisplay = new List <(int, string, CommandInfo)>();
                        foreach (var cmd in ordered)
                        {
                            if (toDisplay.Count >= 5)
                            {
                                break;
                            }
                            var check = await cmd.Item3.CheckPreconditionsAsync(context, Provider);

                            if (check.IsSuccess)
                            {
                                toDisplay.Add(cmd);
                            }
                        }

                        await context.Channel.SendMessageAsync("", false, new EmbedBuilder()
                        {
                            Title       = $"Unknown Command",
                            Description = $"Message: {context.Message.Content.FixLength(512)}\n" +
                                          $"Similar commands: \n{string.Join("\n", toDisplay.Select(x => x.Item2))}",
                            Color = Color.Red
                        }.Build());
                    }
                    else if (result is ParseResult pResult)
                    {
                        BaseLogger.Log($"{context.Message.Content}\n{result.Error}\n{result.ErrorReason}", context, LogSeverity.Error);

                        //Invalid parese result can be
                        //ParseFailed, "There must be at least one character of whitespace between arguments."
                        //ParseFailed, "Input text may not end on an incomplete escape."
                        //ParseFailed, "A quoted parameter is incomplete."
                        //BadArgCount, "The input text has too few parameters."
                        //BadArgCount, "The input text has too many parameters."
                        //typeReaderResults
                        if (pResult.Error.Value == CommandError.BadArgCount && commandInfo.IsSpecified)
                        {
                            await context.Channel.SendMessageAsync("", false, new EmbedBuilder
                            {
                                Title       = $"Argument Error {result.Error.Value}",
                                Description = $"`{commandInfo.Value.Aliases.First()} {string.Join(" ", commandInfo.Value.Parameters.Select(x => x.ParameterInformation()))}`\n" +
                                              $"Message: {context.Message.Content.FixLength(512)}\n" +
                                              "__**Error**__\n" +
                                              $"{result.ErrorReason.FixLength(512)}",
                                Color = Color.DarkRed
                            }.Build());
                        }
                        else
                        {
                            await context.Channel.SendMessageAsync("", false, new EmbedBuilder
                            {
                                Title       = $"Command Parse Error{(result.Error.HasValue ? $": {result.Error.Value}" : "")}",
                                Description = $"Message: {context.Message.Content.FixLength(512)}\n" +
                                              "__**Error**__\n" +
                                              $"{result.ErrorReason.FixLength(512)}\n".FixLength(1024),
                                Color = Color.LightOrange
                            }.Build());
                        }
                    }
                    else
                    {
                        BaseLogger.Log($"{context.Message.Content}\n{result.Error}\n{result.ErrorReason}", context, LogSeverity.Error);
                        await context.Channel.SendMessageAsync("", false, new EmbedBuilder
                        {
                            Title       = $"Command Error{(result.Error.HasValue ? $": {result.Error.Value}" : "")}",
                            Description = $"Message: {context.Message.Content.FixLength(512)}\n" +
                                          "__**Error**__\n" +
                                          $"{result.ErrorReason.FixLength(512)}\n".FixLength(1024),
                            Color = Color.LightOrange
                        }.Build());
                    }
                }
                catch (Exception e)
                {
                    BaseLogger.Log("Issue logging command error messages to channel.\n" + e.ToString(), context, LogSeverity.Error);
                }
            }
        }
Exemplo n.º 29
0
 /// <summary>
 /// Initialize with a specific logger.
 /// </summary>
 /// <param name="logger"></param>
 public static void Add(BaseLogger logger)
 {
     Loggers.Add(logger);
     Loggers.Sort();
 }
 private void WriteDiag(string message)
 {
     BaseLogger.LogDebug($"Component {this.GetType()}: {message}");
 }
 public AkeneoBaseCategoriesListener(AkeneoBaseInformation settings, string token, BaseLogger logger)
 {
     Settings    = settings;
     AuthToken   = token;
     _l          = logger;
     RequestList = new List <AkeneoCategory>();
 }
Exemplo n.º 32
0
 public AkeneoCategoriesProcessorService(AkeneoCategoriesServiceSettings settings, BaseLogger logger)
 {
     ServiceSettings = settings;
     _f = new FilesWriter();
     _l = logger;
     if (ReferenceEquals(ServiceSettings.BaseDir, null) ||
         ReferenceEquals(ServiceSettings.BaseDir, String.Empty))
     {
         ServiceSettings.BaseDir = $@"{Directory.GetCurrentDirectory()}/Resources/Services/Akeneo/AkeneoCategoriesProcessorService/";
     }
 }
Exemplo n.º 33
0
		public void CanWriteSomeLogWithLevelChecking() {
			var man = new DefaultLogManager();
			var file = Path.GetTempFileName();
			var file2 = Path.GetTempFileName();
			var file3 = Path.GetTempFileName();
			var writer = new TextFileWriter {FileName = file, CustomFormat = "${Name}:${Level}", Level = LogLevel.Error};
			var writer2 = new TextFileWriter {FileName = file2, CustomFormat = "${Name}:${Level}", Level = LogLevel.Warn};
			var writer3 = new TextFileWriter {FileName = file3, CustomFormat = "${Name}:${Level}", Level = LogLevel.Trace};
			var logger = new BaseLogger
				{
					Writers = new[] {writer, writer2, writer3},
					Level = LogLevel.Info
					,
					Mask = "ZZZ"
				};
			var logger2 = new BaseLogger
				{
					Writers = new[] {writer, writer2, writer3},
					Level = LogLevel.Trace
					,
					Mask = "ZZZ2"
				};
			man.ErrorBehavior = InternalLoggerErrorBehavior.Throw;

			man.Loggers.Add(logger);
			man.Loggers.Add(logger2);

			var l1 = man.GetLog("ZZZ1", this);
			var l2 = man.GetLog("ZZZ2", this);
			var l3 = man.GetLog("XXX", this); //stub

			l1.Debug("");
			l2.Debug("");
			l3.Debug("");

			l1.Trace("");
			l2.Trace("");
			l3.Trace("");
			Thread.Sleep(10);
			l1.Info("");
			l2.Info("");
			l3.Info("");


			l1.Warn("");
			l2.Warn("");
			l3.Warn("");

			l1.Error("");
			l2.Error("");
			l3.Error("");

			man.Join(); //for direct file access

			var f1 = File.ReadAllText(file);
			var f2 = File.ReadAllText(file2);
			var f3 = File.ReadAllText(file3);
			Console.WriteLine(f1);
			Console.WriteLine(f2);
			Console.WriteLine(f3);
			File.Delete(file);
			File.Delete(file2);
			File.Delete(file3);
			Assert.AreEqual(@"ZZZ1:Error
ZZZ2:Error
ZZZ2:Error
".Trim().LfOnly(), f1.Trim().LfOnly());
			Assert.AreEqual(@"ZZZ1:Warning
ZZZ2:Warning
ZZZ2:Warning
ZZZ1:Error
ZZZ2:Error
ZZZ2:Error".Trim().LfOnly(), f2.Trim().LfOnly());
			Assert.AreEqual(@"ZZZ2:Trace
ZZZ1:Info
ZZZ2:Info
ZZZ2:Info
ZZZ1:Warning
ZZZ2:Warning
ZZZ2:Warning
ZZZ1:Error
ZZZ2:Error
ZZZ2:Error".Trim().LfOnly(), f3.Trim().LfOnly());
		}