public void LogLineShouldAppendLineAtTheEnd()
 {
     const string Message = "test";
     ILogger logger = new MemoryLogger();
     logger.LogLine(Message);
     Assert.AreEqual(Message + Environment.NewLine, logger.ToString());
 }
 public void LogShouldAppendTheTextWhenCalledTwoTimesInARow()
 {
     ILogger logger = new MemoryLogger();
     logger.Log("test");
     logger.Log("тест");
     Assert.AreEqual("testтест", logger.ToString());
 }
 public void LogLineShouldAppendLineBetweenTwoLogCalls()
 {
     const string FirstMessage = "test";
     const string SecondMessage = "тест";
     ILogger logger = new MemoryLogger();
     logger.LogLine(FirstMessage);
     logger.Log(SecondMessage);
     Assert.AreEqual(FirstMessage + Environment.NewLine + SecondMessage, logger.ToString());
 }
 public void EndRoundShouldAddToLoggerAndCallBaseMethod()
 {
     var logger = new MemoryLogger();
     var playerMock = new Mock<IPlayer>();
     var playerWithLogger = new PlayerWithLoggerDecorator(playerMock.Object, logger);
     playerWithLogger.EndRound();
     Assert.IsTrue(logger.ToString().Length > 0);
     playerMock.Verify(x => x.EndRound(), Times.Once());
 }
        public void AddCardShouldAddToLoggerAndCallBaseMethod()
        {
            var logger = new MemoryLogger();
            var playerMock = new Mock<IPlayer>();
            var playerWithLogger = new PlayerWithLoggerDecorator(playerMock.Object, logger);

            playerWithLogger.AddCard(new Card(CardSuit.Club, CardType.Ace));

            Assert.IsTrue(logger.ToString().Length > 0);
            playerMock.Verify(x => x.AddCard(It.IsAny<Card>()), Times.Once());
        }
        public void GetTurnShouldAddToLoggerAndCallBaseMethod()
        {
            var logger = new MemoryLogger();
            var playerMock = new Mock<IPlayer>();
            var playerWithLogger = new PlayerWithLoggerDecorator(playerMock.Object, logger);

            playerWithLogger.GetTurn(
                new PlayerTurnContext(
                    new StartRoundState(new StateManager()),
                    new Card(CardSuit.Club, CardType.Ace),
                    0,
                    0,
                    0));

            Assert.IsTrue(logger.ToString().Length > 0);
            playerMock.Verify(x => x.GetTurn(It.IsAny<PlayerTurnContext>()), Times.Once());
        }
    public void Lox_AddLogger()
    {
        UT_INIT();

        // twice
        {
            ConsoleLogger con=      new ConsoleLogger();
            Log.SetVerbosity( con,      Verbosity.Verbose, ALox.InternalDomains );

            MemoryLogger checkCnt=  new MemoryLogger( "CHECK");
            Log.SetVerbosity( checkCnt, Verbosity.Warning, ALox.InternalDomains );

            MemoryLogger mem1= new MemoryLogger( "MEM" );
            MemoryLogger mem2= new MemoryLogger( "MEM" );

            Log.SetVerbosity( mem1,     Verbosity.Info ); UT_EQ( 0, checkCnt.CntLogs );
            Log.SetVerbosity( mem2,     Verbosity.Info ); UT_EQ( 1, checkCnt.CntLogs );
            Log.SetVerbosity( "XYZ",    Verbosity.Info ); UT_EQ( 2, checkCnt.CntLogs );

            Log.RemoveLogger( mem2     );                 UT_EQ( 3, checkCnt.CntLogs );
            Log.RemoveLogger( mem1     );                 UT_EQ( 3, checkCnt.CntLogs );
            Log.RemoveLogger( mem1     );                 UT_EQ( 4, checkCnt.CntLogs );
            Log.RemoveLogger( "XYZ"    );                 UT_EQ( 5, checkCnt.CntLogs );
            Log.RemoveLogger( con      );                 UT_EQ( 5, checkCnt.CntLogs );
            Log.RemoveLogger( con      );                 UT_EQ( 6, checkCnt.CntLogs );
            Log.RemoveLogger( checkCnt );                 UT_EQ( 6, checkCnt.CntLogs );
        }

        // one logger in two loxes
        {
            Log.AddDebugLogger();
            Lox lox= new Lox( "ReleaseLox" );

            UT_TRUE( Log.DebugLogger.GetSafeness() == Safeness.Unsafe );

            lox.SetVerbosity( Log.DebugLogger , Verbosity.Verbose );

            UT_TRUE( Log.DebugLogger.GetSafeness() == Safeness.Safe );

            lox.RemoveLogger( Log.DebugLogger );

            UT_TRUE( Log.DebugLogger.GetSafeness() == Safeness.Unsafe );

            Log.RemoveDebugLogger();
        }
    }
示例#8
0
        public void Should_continue_observable_after_many_exceptions()
        {
            var logger  = MemoryLogger.Serilog();
            var subject = new Subject <int>();

            var s = "";

            subject.Subscribe(x =>
                              logger.instance.Swallow(() =>
            {
                s += x;
                throw new ArgumentException();
            }));

            subject.OnNext(1);
            subject.OnNext(2);
            s.Should().Be("12");
            logger.messages.Count.Should().Be(2);
        }
示例#9
0
        public void ShouldNotIdleWhenWorkerDoesntExists()
        {
            MemoryLogger  logger;
            IdlerModule   module;
            IWorkerModule workerModule;
            ITaskModule   taskModule;

            workerModule = new MockedWorkerModule(false, new Worker()
            {
                WorkerID = 1, PlanetID = 1
            });
            taskModule = new MockedTaskModule(false);

            logger = new MemoryLogger();
            module = new IdlerModule(logger, taskModule, workerModule);

            Assert.ThrowsException <PIONotFoundException>(() => module.BeginIdle(2, 10));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Warning) && (item.ComponentName == module.ModuleName)));
        }
示例#10
0
        public void ShouldNotTakeWhenWorkerIsAlreadyCarryingItem()
        {
            MemoryLogger  logger;
            TakerModule   module;
            IWorkerModule workerModule;
            ITaskModule   taskModule;

            workerModule = new MockedWorkerModule(false, new Worker()
            {
                WorkerID = 1, PlanetID = 1, ResourceTypeID = ResourceTypeIDs.Wood
            });
            taskModule = new MockedTaskModule(false);

            logger = new MemoryLogger();
            module = new TakerModule(logger, taskModule, workerModule, null, null);

            Assert.ThrowsException <PIOInvalidOperationException>(() => module.BeginTake(1, ResourceTypeIDs.Coal));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Warning) && (item.ComponentName == module.ModuleName)));
        }
示例#11
0
        public App()
        {
            NotifyIcon = new AppNotifyIcon(new System.ComponentModel.Container());

            var notifier = new GuiNotifier(SynchronizationContext.Current);

            notifier.ErrorNotified += (sender, error) =>
            {
                NotifyIcon.NotifyError(error);
            };

            var logger = new MemoryLogger();

            AppMain = AppMain.Load(notifier, logger);

            ScheduleListWindowContainer =
                new ScheduleListWindowContainer(() =>
                                                ScheduleListView.Load(AppMain.SchedulerTask.Result, notifier, logger)
                                                );
        }
示例#12
0
        public void ShouldNotEndTaskWhenSubModuleFails()
        {
            MemoryLogger  logger;
            IdlerModule   module;
            IWorkerModule workerModule;
            ITaskModule   taskModule;



            logger       = new MemoryLogger();
            workerModule = new MockedWorkerModule(true, new Worker()
            {
                WorkerID = 1, PlanetID = 1
            });
            taskModule = new MockedTaskModule(false);
            module     = new IdlerModule(logger, taskModule, workerModule);

            Assert.ThrowsException <PIOInternalErrorException>(() => module.BeginIdle(1, 10));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Error) && (item.ComponentName == module.ModuleName)));
        }
 public RedisRedlockIntegrationTests(RedisFixture redis, ITestOutputHelper console) : base(redis)
 {
     _console = console;
     _log     = new MemoryLogger();
     _5Inst   = new IRedlockInstance[]
     {
         new RedisRedlockInstance(() => Redis.Redis1.GetDatabase(), s => s, "1", 0.1f, _log),
         new RedisRedlockInstance(() => Redis.Redis2.GetDatabase(), s => s, "2", 0.1f, _log),
         new RedisRedlockInstance(() => Redis.Redis3.GetDatabase(), s => s, "3", 0.1f, _log),
         new RedisRedlockInstance(() => Redis.Redis4.GetDatabase(), s => s, "4", 0.1f, _log),
         new RedisRedlockInstance(() => Redis.Redis5.GetDatabase(), s => s, "5", 0.1f, _log),
     }.ToImmutableArray();
     _noQuorum = new IRedlockInstance[]
     {
         new RedisRedlockInstance(() => Redis.Redis1.GetDatabase(), s => s, "1", 0.1f, _log),
         new RedisRedlockInstance(() => Redis.Redis2.GetDatabase(), s => s, "2", 0.1f, _log),
         new RedisRedlockInstance(() => Redis.Unreachable1.GetDatabase(), s => s, "u1", 0.1f, _log),
         new RedisRedlockInstance(() => Redis.Unreachable2.GetDatabase(), s => s, "u2", 0.1f, _log),
     }.ToImmutableArray();
 }
示例#14
0
        public void BasicTextWriting()
        {
            LogManager.Start();
            MemoryLogger memoryLog = LogManager.CreateMemoryLogger();

            memoryLog.SubscribeToEvents(TestLogger.Write, EventLevel.Verbose);
            TestLogger.Write.String("first message");
            TestLogger.Write.String("second\nmessage");
            // we used to test passing \0 characters here -- EventSource in .NET 4.5.1 correctly treats these as string
            // terminators, however in 4.5 it does not. We need to operate in both worlds for now, so we'll ignore this
            // for the time being.
            memoryLog.Disabled = true;

            memoryLog.Stream.Seek(0, SeekOrigin.Begin);
            using (var reader = new StreamReader(memoryLog.Stream))
            {
                string line;
                int    lines = 0;
                while ((line = reader.ReadLine()) != null)
                {
                    ++lines;
                    var expectedMetaData = string.Format("[{0}/{1}/v:TestLogger String]", Process.GetCurrentProcess().Id,
                                                         NativeMethods.GetCurrentWin32ThreadId());
                    Assert.IsTrue(line.Contains(expectedMetaData));
                    // this is the pretty name of the event we should have deduced.
                    switch (lines)
                    {
                    case 1:
                        Assert.IsTrue(line.EndsWith(" message=\"first message\""));
                        break;

                    case 2:
                        Assert.IsTrue(line.EndsWith(" message=\"second\\nmessage\""));
                        break;
                    }
                }
                Assert.AreEqual(2, lines);
            }
            memoryLog.Dispose();
            LogManager.Shutdown();
        }
示例#15
0
        public void ShouldNotEndTaskWhenSubModuleFails()
        {
            MemoryLogger          logger;
            StorerModule          module;
            IBuildingModule       buildingModule;
            IWorkerModule         workerModule;
            IStackModule          stackModule;
            ITaskModule           taskModule;
            MockedSchedulerModule schedulerModule;


            buildingModule = new MockedBuildingModule(false, new Building()
            {
                BuildingID = 2, X = 0, Y = 0
            });

            workerModule = new MockedWorkerModule(false, new Worker()
            {
                WorkerID = 1, PlanetID = 1
            });
            stackModule     = new MockedStackModule(true);
            taskModule      = new MockedTaskModule(false);
            logger          = new MemoryLogger();
            module          = new StorerModule(logger, taskModule, workerModule, buildingModule, stackModule);
            schedulerModule = new MockedSchedulerModule(false, module);
            Assert.ThrowsException <PIOInternalErrorException>(() => module.EndStore(1, ResourceTypeIDs.Wood));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Error) && (item.ComponentName == module.ModuleName)));


            workerModule = new MockedWorkerModule(true, new Worker()
            {
                WorkerID = 1, PlanetID = 1
            });
            stackModule     = new MockedStackModule(false);
            taskModule      = new MockedTaskModule(false);
            logger          = new MemoryLogger();
            module          = new StorerModule(logger, taskModule, workerModule, buildingModule, stackModule);
            schedulerModule = new MockedSchedulerModule(false, module);
            Assert.ThrowsException <PIOInternalErrorException>(() => module.EndStore(1, ResourceTypeIDs.Wood));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Error) && (item.ComponentName == module.ModuleName)));
        }
示例#16
0
        public void ShouldNotEndCreateBuildingTaskWhenWorkerDoesntExists()
        {
            MemoryLogger        logger;
            BuilderModule       module;
            IWorkerModule       workerModule;
            ITaskModule         taskModule;
            IBuildingModule     buildingModule;
            IStackModule        stackModule;
            IMaterialModule     materialModule;
            IBuildingTypeModule buildingTypeModule;

            logger       = new MemoryLogger();
            workerModule = new MockedWorkerModule(false, new Worker()
            {
                WorkerID = 1, PlanetID = 1
            });
            taskModule         = new MockedTaskModule(false);
            buildingModule     = new MockedBuildingModule(false);
            buildingTypeModule = new MockedBuildingTypeModule(false, new BuildingType()
            {
                BuildingTypeID = BuildingTypeIDs.Sawmill
            });
            stackModule = new MockedStackModule(false, new Stack()
            {
                Quantity = 10, ResourceTypeID = ResourceTypeIDs.Wood, StackID = 1
            }, new Stack()
            {
                Quantity = 10, ResourceTypeID = ResourceTypeIDs.Stone, StackID = 1
            });
            materialModule = new MockedMaterialModule(false, new Material()
            {
                Quantity = 1, ResourceTypeID = ResourceTypeIDs.Wood, BuildingTypeID = BuildingTypeIDs.Sawmill
            }, new Material()
            {
                Quantity = 2, ResourceTypeID = ResourceTypeIDs.Stone, BuildingTypeID = BuildingTypeIDs.Sawmill
            });
            module = new BuilderModule(logger, taskModule, workerModule, buildingModule, buildingTypeModule, stackModule, materialModule);

            Assert.ThrowsException <PIONotFoundException>(() => module.EndCreateBuilding(999, BuildingTypeIDs.Sawmill));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Warning) && (item.ComponentName == module.ModuleName)));
        }
        public ActionResponse Execute()
        {
            var logger  = new MemoryLogger();
            var code    = 200;
            var message = "Ok";

            foreach (var script in _context.Process.Scripts.Where(s => !s.Global))
            {
                if (script.File != string.Empty)
                {
                    script.Content = _reader.Read(script.File, new Dictionary <string, string>(), logger);
                    if (logger.Errors().Any())
                    {
                        code = 500;
                        foreach (var error in logger.Errors())
                        {
                            message += error + " ";
                        }
                        break;
                    }
                    foreach (var entity in _context.Process.Entities)
                    {
                        if (entity.Script == script.Name && entity.Query == string.Empty && script.Content != string.Empty)
                        {
                            entity.Query = script.Content;
                        }
                    }
                }
            }

            return(new ActionResponse(code, message)
            {
                Action = new Transformalize.Configuration.Action {
                    Before = true,
                    After = false,
                    Type = "internal",
                    ErrorMode = "abort",
                    Description = "load script"
                }
            });
        }
示例#18
0
        public void ShouldNotProduceWhenBuildingIsNotFinished()
        {
            MemoryLogger          logger;
            ProducerModule        module;
            IBuildingModule       buildingModule;
            IBuildingTypeModule   buildingTypeModule;
            IWorkerModule         workerModule;
            IStackModule          stackModule;
            IIngredientModule     ingredientModule;
            IProductModule        productModule;
            ITaskModule           taskModule;
            MockedSchedulerModule schedulerModule;

            buildingModule = new MockedBuildingModule(false, new Building()
            {
                BuildingID = 1, BuildingTypeID = BuildingTypeIDs.Sawmill, RemainingBuildSteps = 10
            });
            buildingTypeModule = new MockedBuildingTypeModule(false, new BuildingType()
            {
                BuildingTypeID = BuildingTypeIDs.Sawmill, IsFactory = true
            });
            workerModule = new MockedWorkerModule(false, new Worker()
            {
                WorkerID = 1, PlanetID = 1
            });
            stackModule      = new MockedStackModule(false);
            ingredientModule = new MockedIngredientModule(false);
            productModule    = new MockedProductModule(false, new Product()
            {
                ProductID = 1, BuildingTypeID = BuildingTypeIDs.Sawmill, Duration = 4, Quantity = 2
            });
            taskModule = new MockedTaskModule(false);

            logger          = new MemoryLogger();
            module          = new ProducerModule(logger, taskModule, workerModule, buildingModule, buildingTypeModule, stackModule, ingredientModule, productModule);
            schedulerModule = new MockedSchedulerModule(false, module);

            Assert.ThrowsException <PIOInvalidOperationException>(() => module.BeginProduce(1));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Warning) && (item.ComponentName == module.ModuleName)));
            Assert.AreEqual(0, schedulerModule.Count);
        }
示例#19
0
        public async Task LogEntryIsRecorded()
        {
            var logger   = new MemoryLogger <SimpleDependencyInjection.Function>();
            var function = new SimpleDependencyInjection.Function(logger);

            // Constructing the function does not create any log entries.
            Assert.Empty(logger.ListLogEntries());

            // Make a request to the function.
            var context = new DefaultHttpContext
            {
                Request = { Path = "/sample-path" }
            };
            await function.HandleAsync(context);

            var logs  = logger.ListLogEntries();
            var entry = Assert.Single(logs);

            Assert.Equal(LogLevel.Information, entry.Level);
            Assert.Equal("Function called with path /sample-path", entry.Message);
        }
示例#20
0
        public void TestPerformanceCounterSourceSafeStop()
        {
            var logger            = new MemoryLogger(nameof(TestPerformanceCounterSourceSafeStop));
            var config            = TestUtility.GetConfig("Sources", "PerformanceCounter");
            var mockCounterSource = new Mock <PerformanceCounterSource>(MockBehavior.Strict, new PluginContext(config, logger, null));

            // in real deployment, RefreshInstances() might take a long time if there are a lot of counter instances.
            // so we mock this method to simulate the situation
            mockCounterSource.Setup(s => s.RefreshCounters()).Callback(() => Thread.Sleep(1000));
            var source = mockCounterSource.Object;

            source.Start();
            var queryTask = Task.Run(() => source.Query(null));

            Thread.Sleep(500);
            source.Stop();
            queryTask.Wait();

            // assert that no error log message was written
            Assert.Empty(logger.LogLevels.Where(l => l == LogLevel.Error));
        }
        public async Task FileNameIsLogged()
        {
            // Prepare the inputs
            var cloudEvent = new CloudEvent(StorageObjectData.FinalizedCloudEventType, new Uri("//storage.googleapis.com"));
            var data       = new StorageObjectData {
                Name = "new-file.txt"
            };

            CloudEventConverters.PopulateCloudEvent(cloudEvent, data);
            var logger = new MemoryLogger <HelloGcs.Function>();

            // Execute the function
            var function = new HelloGcs.Function(logger);
            await function.HandleAsync(cloudEvent, data, CancellationToken.None);

            // Check the log results
            var logEntry = Assert.Single(logger.ListLogEntries());

            Assert.Equal("File new-file.txt uploaded", logEntry.Message);
            Assert.Equal(LogLevel.Information, logEntry.Level);
        }
        public void Tut_Exception()
        {
#if ALOX_DBG_LOG || ALOX_REL_LOG
            UT_INIT();

            Log.SetVerbosity(tutLog = new MemoryLogger("Tutlog"), Verbosity.Warning, "/");
    #if ALOX_DBG_LOG
            ((TextLogger)Log.GetLogger("Tutlog")).MultiLineMsgMode = 4;
    #endif

            //! [Tut_Exceptions]
            Exception testException = new Exception("TestException Message",
                                                    new Exception("InnerException Message",
                                                                  new Exception("Inner, inner Exception")));
            LogTools.Exception("MYDOM", Verbosity.Warning, testException, "Logging an exception: ");
            //! [Tut_Exceptions]

            tutLog.MemoryLog.SearchAndReplace("Tutlog", "CONSOLE");
            SaveTutorialOutput("Tut_Exceptions.txt", tutLog.MemoryLog);
#endif
        }
        public void Tut_Hello_ALox()
        {
            UT_INIT();


            //! [Tut_ALox_Logger_1]
            Log.AddDebugLogger();
            //! [Tut_ALox_Logger_1]

            Log.RemoveDebugLogger();
            Log.SetVerbosity(tutLog = new MemoryLogger("Tutlog"), Verbosity.Verbose);

            //! [Tut_ALox_Logger_2]
            Log.AddDebugLogger();
            Log.Info("Hello ALox");
            //! [Tut_ALox_Logger_2]

    #if (ALOX_DBG_LOG || ALOX_REL_LOG)
            SaveTutorialOutput("Tut_ALox_Logger.txt", tutLog.MemoryLog);
    #endif
        }
        public void Log_RelativeDomains()
        {
            UT_INIT();

            Lox          lox = new Lox("ReleaseLox");
            MemoryLogger ml  = new MemoryLogger();

            lox.SetVerbosity(ml, Verbosity.Verbose);
            ml.MetaInfo.Format._()._("@%D#");
            lox.SetDomain("/D1/D2/D3", Scope.Method);

            lox.Info("D4", ""); UT_EQ("@/D1/D2/D3/D4#", ml.MemoryLog); ml.MemoryLog._(); ml.AutoSizes.Reset();
            lox.Info("./D4", ""); UT_EQ("@/D1/D2/D3/D4#", ml.MemoryLog); ml.MemoryLog._(); ml.AutoSizes.Reset();
            lox.Info("../D4", ""); UT_EQ("@/D1/D2/D4#", ml.MemoryLog); ml.MemoryLog._(); ml.AutoSizes.Reset();
            lox.Info(".././.././D4", ""); UT_EQ("@/D1/D4#", ml.MemoryLog); ml.MemoryLog._(); ml.AutoSizes.Reset();
            lox.Info("../../../../../D4", ""); UT_EQ("@/D4#", ml.MemoryLog); ml.MemoryLog._(); ml.AutoSizes.Reset();
            lox.Info("../D4/../D5", ""); UT_EQ("@/D1/D2/D5#", ml.MemoryLog); ml.MemoryLog._(); ml.AutoSizes.Reset();


            lox.RemoveLogger(ml);
        }
示例#25
0
        public void WorkerIsInBuildingShouldThrowExceptionAndLogErrorWhenWorkerDoesntExists()
        {
            MemoryLogger          logger;
            LocationCheckerModule module;
            IWorkerModule         workerModule;
            IBuildingModule       buildingModule;

            workerModule = new MockedWorkerModule(false, new Worker()
            {
                WorkerID = 10, PlanetID = 5, X = 10, Y = 10
            });
            buildingModule = new MockedBuildingModule(false, new Building()
            {
                BuildingID = 3, PlanetID = 5, X = 10, Y = 10
            });

            logger = new MemoryLogger();
            module = new LocationCheckerModule(logger, workerModule, buildingModule);
            Assert.ThrowsException <PIONotFoundException>(() => module.WorkerIsInBuilding(1, 2));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Warning) && (item.ComponentName == module.ModuleName)));
        }
示例#26
0
        public void ShouldNotDeleteBotWhenDoesntExistAndLogErrors()
        {
            MemoryLogger        logger;
            BotSchedulerModule  scheduler;
            IBotModule          botModule;
            IOrderManagerModule orderManagerModule;

            PIO.ClientLib.PIOServiceReference.IPIOService client;

            botModule = Substitute.For <IBotModule>();
            botModule.GetBot(Arg.Any <int>()).Returns((x) => null);
            botModule.When(x => x.DeleteBot(Arg.Any <int>())).Do(x => { });

            orderManagerModule = Substitute.For <IOrderManagerModule>();
            client             = Substitute.For <PIO.ClientLib.PIOServiceReference.IPIOService>();

            logger    = new MemoryLogger();
            scheduler = new BotSchedulerModule(logger, client, botModule, orderManagerModule, 1);
            Assert.ThrowsException <PIONotFoundException>(() => scheduler.DeleteBot(1));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Warning) && (item.ComponentName == scheduler.ModuleName)));
        }
        protected override SettingsRegistrationService Given()
        {
            _logger       = new MemoryLogger();
            _typeProvider = new StubTypeProvider(typeof(SensitiveAndSanitized));

            var settingsReader = new StubSettingsReader(new Dictionary <string, string>
            {
                { typeof(SensitiveAndSanitized).Name, SensitiveAndSanitized.OriginalValueRepresentation },
                { typeof(SensitiveAndUnsanitized).Name, SensitiveAndUnsanitized.OriginalValueRepresentation }
            });

            return(new SettingsRegistrationService(_logger,
                                                   _typeProvider,
                                                   SettingKeyConventions.BuiltInConventions.ToArray(),
                                                   settingsReader,
                                                   new NoOpSettingsOverrider(),
                                                   new SettingValueConverter(),
                                                   true,
                                                   setting => { }
                                                   ));
        }
        public void Tut_Instance()
        {
#if ALOX_DBG_LOG || ALOX_REL_LOG
            UT_INIT();

            Log.SetVerbosity(new ConsoleLogger(), Verbosity.Verbose, "/");
            Log.SetVerbosity(tutLog = new MemoryLogger("Tutlog"), Verbosity.Verbose, "/");
            tutLog.MultiLineMsgMode = 4;

            //! [Tut_Instance]
            // Log multi-lines without meta info
    #if ALOX_DBG_LOG
            ((TextLogger)Log.GetLogger("Console")).MultiLineMsgMode = 4;
    #endif

            // Log current thread instance
            LogTools.Instance("MYDOM", Verbosity.Info, Thread.CurrentThread, 2, "Actual Thread: ");
            //! [Tut_Instance]

            // cut the output to 30 lines
            int lines = 32;
            int idx   = 0;
            while (lines-- != 0)
            {
                idx = tutLog.MemoryLog.IndexOf(Environment.NewLine, idx + Environment.NewLine.Length);
                if (idx < 0)
                {
                    break;
                }
            }
            if (idx > 0)
            {
                tutLog.MemoryLog.SetLength(idx + Environment.NewLine.Length);
            }
            tutLog.MemoryLog._("...")._(Environment.NewLine);
            tutLog.MemoryLog._("...")._(Environment.NewLine);
            tutLog.MemoryLog._("...")._(Environment.NewLine);
            SaveTutorialOutput("Tut_Instance.txt", tutLog.MemoryLog);
#endif
        }
示例#29
0
        public void ShouldNotHarvesteWhenWorkerDoesntExists()
        {
            MemoryLogger        logger;
            HarvesterModule     module;
            IBuildingModule     buildingModule;
            IBuildingTypeModule buildingTypeModule;
            IWorkerModule       workerModule;
            IStackModule        stackModule;

            IProductModule        productModule;
            ITaskModule           taskModule;
            MockedSchedulerModule schedulerModule;

            buildingModule = new MockedBuildingModule(false, new Building()
            {
                BuildingID = 1, BuildingTypeID = BuildingTypeIDs.Sawmill
            });
            buildingTypeModule = new MockedBuildingTypeModule(false, new BuildingType()
            {
                BuildingTypeID = BuildingTypeIDs.Sawmill, IsFarm = true
            });
            workerModule = new MockedWorkerModule(false, new Worker()
            {
                WorkerID = 1, PlanetID = 1
            });
            stackModule   = new MockedStackModule(false);
            productModule = new MockedProductModule(false, new Product()
            {
                ProductID = 1, BuildingTypeID = BuildingTypeIDs.Sawmill, Duration = 4, Quantity = 2
            });
            taskModule = new MockedTaskModule(false);

            logger          = new MemoryLogger();
            module          = new HarvesterModule(logger, taskModule, workerModule, buildingModule, buildingTypeModule, stackModule, productModule);
            schedulerModule = new MockedSchedulerModule(false, module);

            Assert.ThrowsException <PIONotFoundException>(() => module.BeginHarvest(2));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Warning) && (item.ComponentName == module.ModuleName)));
            Assert.AreEqual(0, schedulerModule.Count);
        }
        public void Log_IllegalDomainNames()
        {
            UT_INIT();
            Log.AddDebugLogger();

            MemoryLogger ml = new MemoryLogger();

            Log.SetVerbosity(ml, Verbosity.Verbose);
            ml.MetaInfo.Format._()._("<%D>");

            Log.SetVerbosity(Log.DebugLogger, Verbosity.Verbose, ALox.InternalDomains);


            LOG_CHECK("", "</>", ml, Log.LOX);
            LOG_CHECK("LOC", "</LOC>", ml, Log.LOX);
            LOG_CHECK("%", "</#>", ml, Log.LOX);
            LOG_CHECK("\x03", "</#>", ml, Log.LOX);
            LOG_CHECK("<", "</#>", ml, Log.LOX);
            LOG_CHECK(">", "</#>", ml, Log.LOX);
            LOG_CHECK("?", "</#>", ml, Log.LOX);
            LOG_CHECK(",", "</#>", ml, Log.LOX);
            LOG_CHECK("-", "</->", ml, Log.LOX);
            LOG_CHECK("_", "</_>", ml, Log.LOX);
            LOG_CHECK("@", "</@>", ml, Log.LOX);
            LOG_CHECK(".", "</>", ml, Log.LOX);
            LOG_CHECK("..", "</>", ml, Log.LOX);
            LOG_CHECK("CU..", "</CU##>", ml, Log.LOX);

            LOG_CHECK("$%! ", "</####>", ml, Log.LOX);

            Log.SetDomain("METH", Scope.Filename);
            LOG_CHECK("$%! ", "</METH/####>", ml, Log.LOX);

            Log.SetDomain("A\"C", Scope.Filename);
            LOG_CHECK("", "</A#C>", ml, Log.LOX);
            LOG_CHECK("LOC", "</A#C/LOC>", ml, Log.LOX);
            LOG_CHECK("*X*", "</A#C/#X#>", ml, Log.LOX);

            Log.RemoveLogger(ml);
        }
    public void Log_IllegalDomainNames()
    {
        UT_INIT();
        Log.AddDebugLogger();

        MemoryLogger ml= new MemoryLogger();

        Log.SetVerbosity ( ml, Verbosity.Verbose );
        ml.MetaInfo.Format._()._("<%D>");

        Log.SetVerbosity(Log.DebugLogger, Verbosity.Verbose, ALox.InternalDomains );


        LOG_CHECK( ""        , "</>"              , ml,Log.LOX);
        LOG_CHECK( "LOC"     , "</LOC>"           , ml,Log.LOX);
        LOG_CHECK( "%"       , "</#>"             , ml,Log.LOX);
        LOG_CHECK( "\x03"    , "</#>"             , ml,Log.LOX);
        LOG_CHECK( "<"       , "</#>"             , ml,Log.LOX);
        LOG_CHECK( ">"       , "</#>"             , ml,Log.LOX);
        LOG_CHECK( "?"       , "</#>"             , ml,Log.LOX);
        LOG_CHECK( ","       , "</#>"             , ml,Log.LOX);
        LOG_CHECK( "-"       , "</->"             , ml,Log.LOX);
        LOG_CHECK( "_"       , "</_>"             , ml,Log.LOX);
        LOG_CHECK( "@"       , "</@>"             , ml,Log.LOX);
        LOG_CHECK( "."       , "</>"              , ml,Log.LOX);
        LOG_CHECK( ".."      , "</>"              , ml,Log.LOX);
        LOG_CHECK( "CU.."    , "</CU##>"          , ml,Log.LOX);

        LOG_CHECK( "$%! "    , "</####>"          , ml,Log.LOX);

        Log.SetDomain( "METH", Scope.Filename );
        LOG_CHECK( "$%! "    , "</METH/####>"     , ml,Log.LOX);

        Log.SetDomain( "A\"C" , Scope.Filename );
        LOG_CHECK( ""        , "</A#C>"           , ml,Log.LOX);
        LOG_CHECK( "LOC"     , "</A#C/LOC>"       , ml,Log.LOX);
        LOG_CHECK( "*X*"     , "</A#C/#X#>"       , ml,Log.LOX);

        Log.RemoveLogger( ml );
    }
示例#32
0
        static CDRLogger()
        {
            string IniPath = CDR.DB_Helper.FingerprintIniFile;

            if (System.IO.File.Exists(IniPath))
            {
                try
                {
                    CDR.Ini.IniFile ini = new CDR.Ini.IniFile(IniPath);
                    EMail_Automatisering = ini.IniReadValue("Mail", "EMail", EMail_Automatisering);
                    SMTPServer           = ini.IniReadValue("Mail", "SMTPServer", SMTPServer);
                }
                catch { }
            }

            // Gebruik eigen formatter
            BitFactory.Logging.Logger.DefaultFormatterClass = typeof(LogEntryCDRFormatter);

            // We gebruiken de application naam als filename voor het log bestand.
            filename = String.Format(".\\{0}.log", System.Reflection.Assembly.GetExecutingAssembly().GetName().Name);
            if (File.Exists(filename))
            {
                // We voegen info toe om te vertellen dat dit een nieuwe restart is van de applicatie
                using (StreamWriter w = File.AppendText(filename))
                {
                    w.WriteLine();
                    w.WriteLine(String.Format("Application started at {0:yyyy-MM-dd HH:mm:ss.fff}", DateTime.Now));
                    w.WriteLine();
                } //using
            }     //if file exists

            Logger = new CompositeLogger();
            // voeg altijd memory logger toe
            memoryLogger = new MemoryLogger(1000); // capacity van 1000 regels maximaal daarna worden de oude overschreven
            Logger.AddLogger("MemoryLogger", memoryLogger);

            fileLogger = new FileLogger(filename);
            Logger.AddLogger("FileLogger", fileLogger);
        }
示例#33
0
        public VelocityTransform(IContext context, IReader reader) : base(context, context.Field.Type)
        {
            VelocityInitializer.Init();

            var fileBasedTemplate = context.Process.Templates.FirstOrDefault(t => t.Name == context.Transform.Template);

            if (fileBasedTemplate != null)
            {
                var memoryLogger = new MemoryLogger();
                context.Transform.Template = reader.Read(fileBasedTemplate.File, null, memoryLogger);
                if (memoryLogger.Errors().Any())
                {
                    foreach (var error in memoryLogger.Errors())
                    {
                        context.Error(error);
                    }
                }
            }

            _input        = MultipleInput();
            _templateName = Context.Field.Alias + " Template";
        }
示例#34
0
        public void ShouldNotMoveWhenWorkerIsAlreadyWorking()
        {
            MemoryLogger  logger;
            MoverModule   module;
            IWorkerModule workerModule;
            ITaskModule   taskModule;

            workerModule = new MockedWorkerModule(false, new Worker()
            {
                WorkerID = 1, PlanetID = 1
            });
            taskModule = new MockedTaskModule(false, new Task()
            {
                WorkerID = 1
            });

            logger = new MemoryLogger();
            module = new MoverModule(logger, taskModule, workerModule, null);

            Assert.ThrowsException <PIOInvalidOperationException>(() => module.BeginMoveTo(1, 1, 1));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Warning) && (item.ComponentName == module.ModuleName)));
        }
        public void Tut_HierDom()
        {
            UT_INIT();

            Log.SetVerbosity(tutLog = new MemoryLogger("Tutlog"), Verbosity.Verbose);

            //! [Tut_DomainsHierarchical]
            Log.AddDebugLogger();
            Log.SetVerbosity(Log.DebugLogger, Verbosity.Verbose); // the default anyhow
            //...
            Log.Info("UI/MOUSE", "A mouse click");
            //...
            Log.Verbose("UI/MOUSE", "Somebody moved the mouse!");
            //...
            //...
            Log.Info("UI/DLG", "About dialog opend");
            //...
            Log.Verbose("UI/DLG", "About dialog, link to product page pressed.");
            //...
            //! [Tut_DomainsHierarchical]


    #if (ALOX_DBG_LOG || ALOX_REL_LOG)
            SaveTutorialOutput("Tut_DomainsHierarchical.txt", tutLog.MemoryLog);
            tutLog.MemoryLog.Clear(); tutLog.CntLogs = 0;
            Log.RemoveDebugLogger();
    #endif

            //! [Tut_DomainsHierarchical_2]
            Log.SetVerbosity(Log.DebugLogger, Verbosity.Warning, "UI"); // Always sets all sub-domains!
            //! [Tut_DomainsHierarchical_2]

            //! [Tut_DomainsHierarchical_3]
            Log.SetVerbosity(Log.DebugLogger, Verbosity.Warning, "UI");       // First set parent...
            Log.SetVerbosity(Log.DebugLogger, Verbosity.Verbose, "UI/MOUSE"); // ...then children!
            //! [Tut_DomainsHierarchical_3]

            Log.RemoveLogger(tutLog);
        }
示例#36
0
        public void TestPlace()
        {
            var logger  = new MemoryLogger(LogLevel.Debug);
            var process = GetTestProcess("google-place");

            if (process.Errors().Any())
            {
                foreach (var error in process.Errors())
                {
                    Console.WriteLine(error);
                }
                throw new Exception("The configuration has errors");
            }

            var input = new MasterRow(process.GetAllFields().Count());

            var address          = process.Entities.First().Fields.First(f => f.Name == "Address");
            var latitude         = process.Entities.First().CalculatedFields.First(f => f.Name == "Latitude");
            var longitude        = process.Entities.First().CalculatedFields.First(f => f.Name == "Longitude");
            var formattedAddress = process.Entities.First().CalculatedFields.First(f => f.Name == "FormattedAddress");
            var place            = process.Entities.First().CalculatedFields.First(f => f.Name == "PlaceId");

            input[address]          = "1009 Broad St Joseph Michigan 49085";
            input[latitude]         = null;
            input[longitude]        = null;
            input[formattedAddress] = null;

            var context = new PipelineContext(logger, process, process.Entities.First(), address, address.Transforms.First());

            using (var gt = new PlaceTransform(context)) {
                var output = gt.Operate(input);

                Assert.AreEqual("1009 Broad St Joseph 49085", output[address]);
                Assert.AreEqual("ChIJsxyoG5_GEIgRMN8IWvngddA", output[place]);
                Assert.IsNotNull(output[latitude]);
                Assert.IsNotNull(output[longitude]);
                Assert.IsNotNull(output[formattedAddress]);
            }
        }
示例#37
0
        public void ShouldNotifySubscribers()
        {
            MemoryLogger          logger;
            TaskCallbackService   module;
            MockedCallback        callback;
            MockedSchedulerModule mockedSchedulerModule;

            logger = new MemoryLogger();

            mockedSchedulerModule = new MockedSchedulerModule(false);
            callback = new MockedCallback(false);
            module   = new TaskCallbackService(logger, mockedSchedulerModule);
            Assert.IsTrue(module.Subscribe(callback));

            Assert.AreEqual(0, callback.StartedCount);
            mockedSchedulerModule.InvokeTaskStarted();
            Assert.AreEqual(1, callback.StartedCount);

            Assert.AreEqual(0, callback.EndedCount);
            mockedSchedulerModule.InvokeTaskEnded();
            Assert.AreEqual(1, callback.EndedCount);
        }
示例#38
0
        public void ShouldNotEndTaskWhenWorkerDoesntExists()
        {
            MemoryLogger    logger;
            MoverModule     module;
            IBuildingModule buildingModule;
            IWorkerModule   workerModule;
            ITaskModule     taskModule;

            logger         = new MemoryLogger();
            buildingModule = new MockedBuildingModule(false, new Building()
            {
                BuildingID = 3, X = 1, Y = 1
            });
            workerModule = new MockedWorkerModule(false, new Worker()
            {
                WorkerID = 1, PlanetID = 1
            });
            taskModule = new MockedTaskModule(false);
            module     = new MoverModule(logger, taskModule, workerModule, buildingModule);

            Assert.ThrowsException <PIONotFoundException>(() => module.BeginMoveTo(2, 2, 2));
            Assert.IsNotNull(logger.Logs.FirstOrDefault(item => (item.Level == LogLevels.Warning) && (item.ComponentName == module.ModuleName)));
        }
 /** ********************************************************************************************
 * Log_TextLogger_FormatConfig
 **********************************************************************************************/
 void testFormatConfig( String testFormat,
                        String expFmt,
                        String expFmtError    = null,
                        String expFmtWarning  = null,
                        String expFmtInfo     = null,
                        String expFmtVerbose  = null
                      )
 {
     Variable var= new Variable();
     var.Define(ALox.ConfigCategoryName, "TESTML_FORMAT", ',').Store( testFormat  );
 
     Lox lox= new Lox("TEST");   
     MemoryLogger ml= new MemoryLogger("TESTML");
     lox.SetVerbosity( ml, Verbosity.Info );
     lox.RemoveLogger( ml );
     ALox.Register( lox, ContainerOp.Remove );
 
                                  UT_EQ( expFmt       , ml.MetaInfo.Format );
     if( expFmtError  != null ) { UT_EQ( expFmtError  , ml.MetaInfo.VerbosityError   ); }
     if( expFmtWarning!= null ) { UT_EQ( expFmtWarning, ml.MetaInfo.VerbosityWarning ); }
     if( expFmtInfo   != null ) { UT_EQ( expFmtInfo   , ml.MetaInfo.VerbosityInfo    ); }
     if( expFmtVerbose!= null ) { UT_EQ( expFmtVerbose, ml.MetaInfo.VerbosityVerbose ); }
 }
    public void Log_ColorsAndStyles()
    {
        UT_INIT();

        Log.AddDebugLogger();
        Log.SetDomain( "COLORS", Scope.Method );
        #if ALOX_DBG_LOG
            MemoryLogger ml= new MemoryLogger();
            Log.SetVerbosity( ml, Verbosity.Verbose, "/" );
        #endif
        Log.SetVerbosity( Log.DebugLogger, Verbosity.Verbose, "/" );

        Log.Info   ( "Playing with colors. Depending on the test environment, the colors might "
                    +"be visible or not" );
        Log.Info   ( "In the memory logger, all color/style codes have to disappear (by default)" );
        Log.Verbose( "A verbose message" );
        Log.Info   ( "An info message" );
        Log.Warning( "A warning message" );
        Log.Error  ( "An error message" );

        #if ALOX_DBG_LOG
            int mlPos= ml.MemoryLog.IndexOf("/COLORS" );
            UT_TRUE( mlPos > 0 );
            mlPos+= 8;
        #endif

        Log.Info( "FG Colors:  "
                                    + ">>>" + ESC.RED     + "RED"        + ESC.FG_RESET + "<<<"
                                    + ">>>" + ESC.GREEN   + "GREEN"      + ESC.FG_RESET + "<<<"
                                    + ">>>" + ESC.BLUE    + "BLUE"       + ESC.FG_RESET + "<<<"
                                    + ">>>" + ESC.CYAN    + "CYAN"       + ESC.FG_RESET + "<<<"
                                    + ">>>" + ESC.MAGENTA + "MAGENTA"    + ESC.FG_RESET + "<<<"
                                    + ">>>" + ESC.YELLOW  + "YELLOW"     + ESC.FG_RESET + "<<<"
                                    + ">>>" + ESC.GRAY    + "GRAY"       + ESC.FG_RESET + "<<<"
                                    + ">>>" + ESC.WHITE   + "WHITE"      + ESC.FG_RESET + "<<<"
                                    + ">>>" + ESC.BLACK   + "BLACK"      + ESC.FG_RESET + "<<<"
                                    );

        #if ALOX_DBG_LOG
            UT_TRUE( ml.MemoryLog.IndexOf("\x1B") < 0 ); ml.MemoryLog.Clear();
        #endif
        Log.Info( "BG Colors:  "
                                    + ">>>" + ESC.BG_RED     + "RED"        + ESC.BG_RESET + "<<<"
                                    + ">>>" + ESC.BG_GREEN   + "GREEN"      + ESC.BG_RESET + "<<<"
                                    + ">>>" + ESC.BG_BLUE    + "BLUE"       + ESC.BG_RESET + "<<<"
                                    + ">>>" + ESC.BG_CYAN    + "CYAN"       + ESC.BG_RESET + "<<<"
                                    + ">>>" + ESC.BG_MAGENTA + "MAGENTA"    + ESC.BG_RESET + "<<<"
                                    + ">>>" + ESC.BG_YELLOW  + "YELLOW"     + ESC.BG_RESET + "<<<"
                                    + ">>>" + ESC.BG_GRAY    + "GRAY"       + ESC.BG_RESET + "<<<"
                                    + ">>>" + ESC.BG_WHITE   + "WHITE"      + ESC.BG_RESET + "<<<"
                                    + ">>>" + ESC.BG_BLACK   + "BLACK"      + ESC.BG_RESET + "<<<"
                                    );

        #if ALOX_DBG_LOG
            UT_TRUE( ml.MemoryLog.IndexOf("\x1B") < 0 ); ml.MemoryLog.Clear();
        #endif
        Log.Info( "FG/BG same: "
                                + ">>>" + ESC.RED     + ESC.BG_RED     + "RED"        + ESC.RESET + "<<<"
                                + ">>>" + ESC.GREEN   + ESC.BG_GREEN   + "GREEN"      + ESC.RESET + "<<<"
                                + ">>>" + ESC.BLUE    + ESC.BG_BLUE    + "BLUE"       + ESC.RESET + "<<<"
                                + ">>>" + ESC.CYAN    + ESC.BG_CYAN    + "CYAN"       + ESC.RESET + "<<<"
                                + ">>>" + ESC.MAGENTA + ESC.BG_MAGENTA + "MAGENTA"    + ESC.RESET + "<<<"
                                + ">>>" + ESC.YELLOW  + ESC.BG_YELLOW  + "YELLOW"     + ESC.RESET + "<<<"
                                + ">>>" + ESC.GRAY    + ESC.BG_GRAY    + "GRAY"       + ESC.RESET + "<<<"
                                + ">>>" + ESC.WHITE   + ESC.BG_WHITE   + "WHITE"      + ESC.RESET + "<<<"
                                + ">>>" + ESC.BLACK   + ESC.BG_BLACK   + "BLACK"      + ESC.RESET + "<<<"
                                );

        #if ALOX_DBG_LOG
            AnsiConsoleLogger   acl= (AnsiConsoleLogger)    Log.GetLogger( "ANSI_CONSOLE" );
            ColorConsoleLogger  ccl= (ColorConsoleLogger)   Log.GetLogger( "COLORCONSOLE" );
            if ( acl!=null )        acl.IsBackgroundLight= !acl.IsBackgroundLight;
            if ( ccl!=null )        ccl.IsBackgroundLight= !ccl.IsBackgroundLight;
        #endif


        Log.Info( "Same rev.:  "
                                + ">>>" + ESC.RED     + ESC.BG_RED     + "RED"        + ESC.RESET + "<<<"
                                + ">>>" + ESC.GREEN   + ESC.BG_GREEN   + "GREEN"      + ESC.RESET + "<<<"
                                + ">>>" + ESC.BLUE    + ESC.BG_BLUE    + "BLUE"       + ESC.RESET + "<<<"
                                + ">>>" + ESC.CYAN    + ESC.BG_CYAN    + "CYAN"       + ESC.RESET + "<<<"
                                + ">>>" + ESC.MAGENTA + ESC.BG_MAGENTA + "MAGENTA"    + ESC.RESET + "<<<"
                                + ">>>" + ESC.YELLOW  + ESC.BG_YELLOW  + "YELLOW"     + ESC.RESET + "<<<"
                                + ">>>" + ESC.GRAY    + ESC.BG_GRAY    + "GRAY"       + ESC.RESET + "<<<"
                                + ">>>" + ESC.WHITE   + ESC.BG_WHITE   + "WHITE"      + ESC.RESET + "<<<"
                                + ">>>" + ESC.BLACK   + ESC.BG_BLACK   + "BLACK"      + ESC.RESET + "<<<"
                                );
        #if ALOX_DBG_LOG
            if ( acl!=null )        acl.IsBackgroundLight= !acl.IsBackgroundLight;
            if ( ccl!=null )        ccl.IsBackgroundLight= !ccl.IsBackgroundLight;
        #endif

        #if ALOX_DBG_LOG
            Log.Verbose( ml.MemoryLog.ToString( mlPos ) );
            UT_TRUE( ml.MemoryLog.IndexOf("\x1B") < 0 ); ml.MemoryLog.Clear();
        #endif
        Log.Info( "Reset FG/BG: "
                                    + ESC.BG_RED     + "BG RED"
                                    + ESC.GREEN      + "FG REEN"
                                    + ESC.FG_RESET   + "FG Reset"
                                    + ESC.BG_RESET   + "BG Reset"
                                    );
        #if ALOX_DBG_LOG
            Log.Verbose( ml.MemoryLog.ToString( mlPos ) );
            UT_TRUE( ml.MemoryLog.IndexOf("\x1B") < 0 ); ml.MemoryLog.Clear();
        #endif

        Log.Info( "Reset FG/BG: "
                                    + ESC.BG_RED     + "BG RED"
                                    + ESC.GREEN      + "FG REEN"
                                    + ESC.BG_RESET   + "BG Reset"
                                    + ESC.FG_RESET   + "FG Reset"
                                    );
        #if ALOX_DBG_LOG
            Log.Verbose( ml.MemoryLog.ToString( mlPos ) );
            UT_TRUE( ml.MemoryLog.IndexOf("\x1B") < 0 ); ml.MemoryLog.Clear();
        #endif

        Log.Info( "Reset FG/BG: "
                                    + ESC.BG_RED     + "BG RED"
                                    + ESC.GREEN      + "FG REEN"
                                    + ESC.RESET      + "All Reset"
                                    );
        #if ALOX_DBG_LOG
            Log.Verbose( ml.MemoryLog.ToString( mlPos ) );
            UT_TRUE( ml.MemoryLog.IndexOf("\x1B") < 0 ); ml.MemoryLog.Clear();
        #endif

        Log.Info( "Styles: "
                                    + ">>>" + ESC.BOLD     + "Bold"          + ESC.STYLE_RESET + "<<<"
                                    + ">>>" + ESC.ITALICS  + "Italics"       + ESC.STYLE_RESET  + "<<<"
                                    + ">>>" + ESC.BOLD
                                    + ">>>" + ESC.ITALICS  + "Bold/Italics"   + ESC.STYLE_RESET  + "+<  Styles do not work in Windows consoles"
                                    );

        #if ALOX_DBG_LOG
            Log.Verbose( ml.MemoryLog.ToString( mlPos ) );
            UT_TRUE( ml.MemoryLog.IndexOf("\x1B") < 0 ); ml.MemoryLog.Clear();
        #endif

        Log.Info( "Reset Style/FG/BG: "
                                    + ESC.BOLD        + "Bold"
                                    + ESC.BG_RED      + "BG RED"
                                    + ESC.GREEN       + "FG REEN"
                                    + ESC.BG_RESET    + "BG Reset"
                                    + ESC.FG_RESET    + "FG Reset"
                                    + ESC.STYLE_RESET + "Style Reset"
                                    );
        #if ALOX_DBG_LOG
            Log.Verbose( ml.MemoryLog.ToString( mlPos ) );
            UT_TRUE( ml.MemoryLog.IndexOf("\x1B") < 0 ); ml.MemoryLog.Clear();
        #endif

        Log.Info( "Reset Style/FG/BG: "
                                    + ESC.BOLD        + "Bold"
                                    + ESC.BG_RED      + "BG RED"
                                    + ESC.GREEN       + "FG REEN"
                                    + ESC.RESET       + "Reset All"
                                    );

        #if ALOX_DBG_LOG
            Log.Verbose( ml.MemoryLog.ToString( mlPos ) );
            UT_TRUE( ml.MemoryLog.IndexOf("\x1B") < 0 ); ml.MemoryLog.Clear();
        #endif

            Log.Info( "Reset Style/FG/BG: "
                                    + ESC.BOLD        + "Bold"
                                    + ESC.BG_RED      + "BG RED"
                                    + ESC.GREEN       + "FG REEN"
                                    + ESC.STYLE_RESET + "Style Reset"
                                    + ESC.BG_RESET    + "BG Reset"
                                    + ESC.FG_RESET    + "FG Reset"
                                    + "   +< This does not work on ANSI terminals: Styl reset, resets ALL here"
                                    );

        #if ALOX_DBG_LOG
            Log.Verbose( ml.MemoryLog.ToString( mlPos ) );
            UT_TRUE( ml.MemoryLog.IndexOf("\x1B") < 0 ); ml.MemoryLog.Clear();
        #endif

        Log.Info( "An URL: "
                                    + ESC.URL_START   + "www.darwin.heaven"
                                    + ESC.URL_END     + ", your resource for happyness!"
                                    );

        #if ALOX_DBG_LOG
            Log.Verbose( ml.MemoryLog.ToString( mlPos ) );
            UT_TRUE( ml.MemoryLog.IndexOf("\x1B") < 0 ); ml.MemoryLog.Clear();
        #endif
    }
public void Tut_LogData()
{
    UT_INIT();
    Log.AddDebugLogger();
    Log.SetVerbosity( tutLog= new MemoryLogger( "Tutlog" ), Verbosity.Verbose );

    Log.SetVerbosity( Log.DebugLogger, Verbosity.Verbose, ALox.InternalDomains );

    // access without prior setting
    {
        Log.Info( "Working on file version " + Log.Retrieve( "FILE_VERSION" ).IntegerValue );
        SaveTutorialOutput( "Tut_LogData2.txt", tutLog.MemoryLog );
        tutLog.MemoryLog.Clear();
    }

    FileIO fileIo = new FileIO();
    fileIo.Read( "myfile.dat" );

    //! [Tut_LogData_2]
    Log.Info( "Working on file version " + Log.Retrieve( "FILE_VERSION" ).IntegerValue );
    //! [Tut_LogData_2]

    SaveTutorialOutput( "Tut_LogData.txt", tutLog.MemoryLog );

    Log.RemoveDebugLogger();
    Log.RemoveLogger( "MEMORY" );
}
public void Tut_UsingLogBuffer()
{
#if ALOX_DBG_LOG || ALOX_REL_LOG
    UT_INIT();
    Log.SetVerbosity( tutLog= new MemoryLogger( "Tutlog" ), Verbosity.Verbose );

    //! [Tut_UsingLogBuffer1]
    //  Create logger and register domain LOGBUF
    Log.AddDebugLogger();
    Log.SetDomain( "LOGBUF", Scope.Method );

    //  Let's do some logging using the internal buffer singleton;
    Log.Info( Log.Buf()._( "Hello Buf!. This is only one string. Not useful to use the buf, however..." ) );
    Log.Info( Log.Buf()._( "This is a 5-digtit rep of 42: " )._( 42, 5 ) );
    Log.Info( Log.Buf()._( "***All upper case and stars replaced by dollar signs ***" )
                       .ToUpper()
                       .SearchAndReplaceAll( "*", "$" )
            );
    //! [Tut_UsingLogBuffer1]

    //! [Tut_UsingLogBuffer2]
    // using the log buf outside of the <em>Log Statement</em>
    #if ALOX_DBG_LOG

        AString logBuf= Log.Buf();
        logBuf._( "Lets see if school math is correct: " );
        int a= 4;
        int b= 2;
        if( a/b == 3)
        {
            // shout it out loud!
            logBuf._( "They taught me wrong in school!" );
            Log.Error( logBuf );
        }
        else
        {
            // we better say nothing
            Log.BufAbort();
        }

    #endif
    //! [Tut_UsingLogBuffer2]

    Report.GetDefault().PushHaltFlags( false, false );

    //! [Tut_UsingLogBuffer3]
    // causing trouble
    Log.Info( "Let's create an internal error by accessing the buffer twice:" );
    Log.Buf();
    Log.Buf();
    //! [Tut_UsingLogBuffer3]

    Report.GetDefault().PopHaltFlags();

    tutLog.MemoryLog.SearchAndReplace( "Tutlog", "CONSOLE" );
    SaveTutorialOutput( "Tut_UsingLogBuffer.txt", tutLog.MemoryLog );
#endif
}
    public void Log_ObjectConverter()
    {
        UT_INIT();

        Log.AddDebugLogger();

        Log.SetDomain( "OBJECT_CONV",       Scope.Method );
        MemoryLogger ml= new MemoryLogger();
        ml.MetaInfo.Format._();
        Log.SetVerbosity( ml, Verbosity.Verbose );

        StringConverter mainConverter= (StringConverter) ml.ObjectConverters[0];
        // test without my converter
        MyType mytype= new MyType();
        Log.Info( "Test" ); UT_TRUE( ml.MemoryLog.IndexOf( "Test" ) >= 0 );                        ml.MemoryLog._();
        Log.Info( null   ); UT_TRUE( ml.MemoryLog.IndexOf( mainConverter.FmtNullObject ) >= 0 );   ml.MemoryLog._();
        Log.Info( mytype ); UT_EQ  ( mytype.ToString(), ml.MemoryLog );                            ml.MemoryLog._();
        Log.Info( null   ); UT_EQ  ( mainConverter.FmtNullObject,  ml.MemoryLog );                 ml.MemoryLog._();

        // test without my converter
                     ml.ObjectConverters.Add( new MyObjectConverter() );
        Log.DebugLogger.ObjectConverters.Add( new MyObjectConverter() );
        Log.Info( "Test" ); UT_TRUE( ml.MemoryLog.IndexOf( "Test" ) >= 0 );                        ml.MemoryLog._();
        Log.Info( null   ); UT_EQ  ( "MyObjectConverter: null" , ml.MemoryLog );                   ml.MemoryLog._();
        Log.Info( mytype   ); UT_EQ( "my type"                 , ml.MemoryLog );                   ml.MemoryLog._();

        // cleanup
        Log.RemoveLogger( ml );
        Log.RemoveDebugLogger();
    }
public void Tut_Prefix()
{
    UT_INIT();

    Log.SetVerbosity( tutLog= new MemoryLogger( "Tutlog" ), Verbosity.Verbose );
    Log.AddDebugLogger();

    //! [Tut_Prefix]
    Log.SetPrefix( "ALOX TUTORIAL: ", Scope.Method );

    Log.Info( "Well, just a sample" );
    //! [Tut_Prefix]


    #if (ALOX_DBG_LOG || ALOX_REL_LOG)
    SaveTutorialOutput( "Tut_Prefix.txt", tutLog.MemoryLog );
    #endif

    //! [Tut_Prefix_2]
    Log.SetPrefix( ESC.BG_MAGENTA, Scope.Filename );
    //! [Tut_Prefix_2]

    Log.Warning( "magenta" );

    Log.RemoveLogger( tutLog );
}
    public void Log_Multiline()
    {
        #if ALOX_DBG_LOG || ALOX_REL_LOG
            UT_INIT();
            Log.AddDebugLogger();
            MemoryLogger ml= new MemoryLogger();


            Log.SetDomain( "/MLine", Scope.Method );
            Log.SetVerbosity( Log.DebugLogger, Verbosity.Verbose, "/MLine" );
            Log.SetVerbosity( ml, Verbosity.Verbose, "/MLine" );


            Log.DebugLogger.MultiLineMsgMode= 0;
            Log.Info( "" );
            Log.Info( "-------- ML Mode = 0 (single line) --------" );
            Log.State( "MLine", Verbosity.Info, "Our Log configuration is:" );

            Log.DebugLogger.MultiLineMsgMode= 0;
            Log.DebugLogger.MultiLineDelimiterRepl= "~|~";
            Log.Info( "" );
            Log.Info( "-------- ML Mode = 0 (single line) with delimiter replacement set to ~|~ --------" );
            Log.State( "MLine", Verbosity.Info, "Our Log configuration is:" );

            Log.DebugLogger.MultiLineMsgMode= 0;
            Log.DebugLogger.MultiLineDelimiter= "";
            Log.Info( "" );
            Log.Info( "-------- ML Mode = 0 (single line) with delimiter set to \"\" (stops multi line processing) --------" );
            Log.State( "MLine", Verbosity.Info, "Our Log configuration is:" );

            Log.DebugLogger.MultiLineMsgMode= 1;
            Log.Info( "" );
            Log.Info( "-------- ML Mode = 1 (multi line, all meta info per line) --------" );
            Log.State( "MLine", Verbosity.Info, "Our Log configuration is:" );

            Log.DebugLogger.MultiLineMsgMode= 2;
            Log.Info( "" );
            Log.Info( "-------- ML Mode = 2 (multi line, meta info blanked) --------" );
            Log.State( "MLine", Verbosity.Info, "Our Log configuration is:" );

            Log.DebugLogger.MultiLineMsgMode= 3;
            Log.Info( "" );
            Log.Info( "-------- ML Mode = 3 (multi line, print headline with info, text starts at pos 0) --------" );
            Log.State( "MLine", Verbosity.Info, "Our Log configuration is:" );

            Log.DebugLogger.MultiLineMsgMode= 4;
            Log.Info( "" );
            Log.Info( "-------- ML Mode = 4 (pure multi line, no meta info, no headline, starts at pos 0)) --------" );
            Log.State( "MLine", Verbosity.Info, "Our Log configuration is:" );
        #endif
    }
        public void NameShouldReturnBaseName()
        {
            const string PlayerName = "тест";

            var logger = new MemoryLogger();
            var playerMock = new Mock<IPlayer>();
            playerMock.SetupGet(x => x.Name).Returns(PlayerName);

            var playerWithLogger = new PlayerWithLoggerDecorator(playerMock.Object, logger);

            Assert.AreEqual(PlayerName, playerWithLogger.Name);
        }
 static CS_Manual()
 {
     CS_Manual.memLog = new MemoryLogger();
     memLog.MetaInfo.Format._()._( "%SF(%SL):%SM()%A3%V[%D]: " );
 }
public void Tut_Verbosity()
{
    UT_INIT();

    Log.SetVerbosity( tutLog= new MemoryLogger( "Tutlog" ), Verbosity.Verbose );

    //! [Tut_Verbosity]
    Log.AddDebugLogger();

    Log.Error  ( "A severe error happened :-(" );
    Log.Warning( "This is a warning :-/ Maybe an error follows?" );
    Log.Info   ( "Just for your further information!" );
    Log.Verbose( "Today, I am in the mood to talk..." );
    //! [Tut_Verbosity]


    //! [Tut_Verbosity_SetVerbosity]
    Log.SetVerbosity( Log.DebugLogger, Verbosity.Warning );
    //! [Tut_Verbosity_SetVerbosity]

    //! [Tut_Verbosity_SetVerbosity_2]
    Log.SetVerbosity( "DEBUG_LOGGER", Verbosity.Warning );
    //! [Tut_Verbosity_SetVerbosity_2]

    #if (ALOX_DBG_LOG || ALOX_REL_LOG)
        SaveTutorialOutput( "Tut_Verbosity.txt", tutLog.MemoryLog );
        tutLog.MemoryLog.Clear(); tutLog.CntLogs= 0;
        Log.SetVerbosity( tutLog, Verbosity.Warning);
    #endif

    Log.RemoveDebugLogger();

    //! [Tut_Verbosity_2]
    Log.AddDebugLogger();

    Log.SetVerbosity( Log.DebugLogger, Verbosity.Warning );

    Log.Error  ( "A severe error happened :-(" );
    Log.Warning( "This is a warning :-/ Maybe an error follows?" );
    Log.Info   ( "Just for your further information!" );
    Log.Verbose( "Today, I am in the mood to talk..." );
    //! [Tut_Verbosity_2]

    #if (ALOX_DBG_LOG || ALOX_REL_LOG)
        SaveTutorialOutput( "Tut_Verbosity_2.txt", tutLog.MemoryLog );
    #endif
    Log.RemoveLogger( tutLog );
}
public void Tut_Hello_ALox()
{
    UT_INIT();


    //! [Tut_ALox_Logger_1]
    Log.AddDebugLogger();
    //! [Tut_ALox_Logger_1]

    Log.RemoveDebugLogger();
    Log.SetVerbosity( tutLog= new MemoryLogger( "Tutlog" ), Verbosity.Verbose );

    //! [Tut_ALox_Logger_2]
    Log.AddDebugLogger();
    Log.Info( "Hello ALox" );
    //! [Tut_ALox_Logger_2]

    #if (ALOX_DBG_LOG || ALOX_REL_LOG)
        SaveTutorialOutput( "Tut_ALox_Logger.txt", tutLog.MemoryLog );
    #endif
}
        public void StartRoundShouldAddToLoggerAndCallBaseMethod()
        {
            var logger = new MemoryLogger();
            var playerMock = new Mock<IPlayer>();
            var playerWithLogger = new PlayerWithLoggerDecorator(playerMock.Object, logger);

            var card = new Card(CardSuit.Diamond, CardType.King);
            var cards = new List<Card> { card };
            var trumpCard = new Card(CardSuit.Club, CardType.Ace);
            playerWithLogger.StartRound(cards, trumpCard, 1, 4);

            Assert.IsTrue(logger.ToString().Length > 0);
            Assert.IsTrue(logger.ToString().Contains(card.ToString()));
            Assert.IsTrue(logger.ToString().Contains(trumpCard.ToString()));
            playerMock.Verify(x => x.StartRound(cards, trumpCard, 1, 4), Times.Once());
        }
    public static void PerformanceTestRL()
    {
        // create a lox for release logging
        Lox lox= new Lox( "ReleaseLox" );
        TextLogger   relLogger= Lox.CreateConsoleLogger();
        MemoryLogger ml       = new MemoryLogger();


        lox.SetVerbosity( relLogger, Verbosity.Verbose, "/CON" );
        lox.SetVerbosity( ml       , Verbosity.Verbose, "/MEM" );


        lox.Info( "/CON", "Logging simple info lines into a memory logger" );

        AString  msgBuf=  new AString( );
        long     fastest= long.MaxValue;
        Ticks    timer=     new Ticks();
        int      qtyLines=   100;
        int      qtyLoops=  1000;
        if( System.Diagnostics.Debugger.IsAttached )
            qtyLines= qtyLoops= 10;

        for ( int i= 0 ; i < qtyLoops ; i++ )
        {
            #if ALOX_DBG_LOG || ALOX_REL_LOG
                ml.MemoryLog.Clear();
            #endif

            timer.Set();
                for ( int ii= 0 ; ii < qtyLines ; ii++ )
                {
                    lox.Info( "/MEM", "Test Line" );
                    if( i== 0 && ii == 0) Console.WriteLine( ml.MemoryLog.ToString() );
                }
            long t= timer.Age().Raw();

            if ( fastest > t )
            {
                fastest= t;
                lox.Info( "/CON", msgBuf.Clear()._( "Pass " )._( i, 3)._( " is new fastest:  ")
                                       ._( (int) (new Ticks( fastest)).InMicros(), 0)
                                       ._( " micros per ")._(qtyLines)._(" logs.") );
            }
        }

        double microsPerLog=  ( (double) (new Ticks(fastest)).InMicros() ) / qtyLines;
        int    logsPerSecond= (int)( 1000000.0 / microsPerLog);
        lox.Info( "/CON", msgBuf._()._( "  " )._( ESC.MAGENTA )._( "Fastest Release Logging: " )
                                    ._( microsPerLog  )._( " micros per log (resp " )
                                    ._( logsPerSecond )._( " logs per second) " ) );

        lox.RemoveLogger( ml );
        lox.RemoveLogger( relLogger );
    }
public void Tut_Instance()
{
#if ALOX_DBG_LOG || ALOX_REL_LOG
    UT_INIT();

    Log.SetVerbosity( new ConsoleLogger(), Verbosity.Verbose, "/" );
    Log.SetVerbosity( tutLog= new MemoryLogger( "Tutlog" ), Verbosity.Verbose, "/" );
    tutLog.MultiLineMsgMode= 4;

    //! [Tut_Instance]
    // Log multi-lines without meta info
    #if ALOX_DBG_LOG
        ((TextLogger) Log.GetLogger( "Console" )).MultiLineMsgMode= 4;
    #endif

    // Log current thread instance
    LogTools.Instance( "MYDOM", Verbosity.Info, Thread.CurrentThread, 2, "Actual Thread: " );
    //! [Tut_Instance]

    // cut the output to 30 lines
    int lines= 32;
    int idx= 0;
    while (lines-- != 0)
    {
        idx= tutLog.MemoryLog.IndexOf( Environment.NewLine, idx + Environment.NewLine.Length );
        if ( idx < 0 )
            break;
    }
    if (idx > 0)
        tutLog.MemoryLog.SetLength( idx + Environment.NewLine.Length );
    tutLog.MemoryLog._( "..." )._( Environment.NewLine );
    tutLog.MemoryLog._( "..." )._( Environment.NewLine );
    tutLog.MemoryLog._( "..." )._( Environment.NewLine );
    SaveTutorialOutput( "Tut_Instance.txt", tutLog.MemoryLog );
#endif
}
        public void StartGameShouldAddToLoggerAndCallBaseMethod()
        {
            const string OtherPlayerIdentifier = "тест";
            var logger = new MemoryLogger();
            var playerMock = new Mock<IPlayer>();
            var playerWithLogger = new PlayerWithLoggerDecorator(playerMock.Object, logger);

            playerWithLogger.StartGame(OtherPlayerIdentifier);

            Assert.IsTrue(logger.ToString().Length > 0);
            Assert.IsTrue(logger.ToString().Contains(OtherPlayerIdentifier));
            playerMock.Verify(x => x.StartGame(It.IsAny<string>()), Times.Once());
        }
public void Tut_Exception()
{
#if ALOX_DBG_LOG || ALOX_REL_LOG
    UT_INIT();

    Log.SetVerbosity( tutLog= new MemoryLogger( "Tutlog" ), Verbosity.Warning, "/" );
    #if ALOX_DBG_LOG
        ((TextLogger) Log.GetLogger( "Tutlog" )).MultiLineMsgMode= 4;
    #endif

    //! [Tut_Exceptions]
    Exception testException=  new Exception( "TestException Message",
                                                new Exception ( "InnerException Message",
                                                                new Exception("Inner, inner Exception") ) );
    LogTools.Exception( "MYDOM", Verbosity.Warning, testException, "Logging an exception: " );
    //! [Tut_Exceptions]

    tutLog.MemoryLog.SearchAndReplace( "Tutlog", "CONSOLE" );
    SaveTutorialOutput( "Tut_Exceptions.txt", tutLog.MemoryLog );
#endif
}
public void Tut_Domains()
{
    UT_INIT();

    Log.SetVerbosity( tutLog= new MemoryLogger( "Tutlog" ), Verbosity.Verbose );

    //! [Tut_Domains]
    Log.AddDebugLogger();
    Log.SetVerbosity( Log.DebugLogger, Verbosity.Verbose ); // the default anyhow
    //...
    Log.Verbose( "HTTP", "Connected" );
    //...
    //...
    //...
    Log.Verbose( "UI",   "Somebody moved the mouse!" );
    //...
    //! [Tut_Domains]


    #if (ALOX_DBG_LOG || ALOX_REL_LOG)
        SaveTutorialOutput( "Tut_Domains.txt", tutLog.MemoryLog );
        tutLog.MemoryLog.Clear(); tutLog.CntLogs= 0;
        Log.RemoveDebugLogger();
    #endif
    Log.SetVerbosity( tutLog, Verbosity.Verbose,  "HTTP" ); // our interest
    Log.SetVerbosity( tutLog, Verbosity.Error,    "UI"   ); // only if ouch!

    //! [Tut_Domains_2]
    Log.AddDebugLogger();

    Log.SetVerbosity( Log.DebugLogger, Verbosity.Verbose,  "HTTP" ); // our interest
    Log.SetVerbosity( Log.DebugLogger, Verbosity.Error,    "UI"   ); // only if ouch!
    //...
    Log.Verbose( "HTTP", "Connected" );
    //...
    //...
    //...
    Log.Verbose( "UI",   "Somebody moved the mouse!" );
    //...
    //! [Tut_Domains_2]


    #if (ALOX_DBG_LOG || ALOX_REL_LOG)
        SaveTutorialOutput( "Tut_Domains_2.txt", tutLog.MemoryLog );
    #endif
    Log.RemoveLogger( tutLog );
}
public void Tut_XML()
{
#if ALOX_DBG_LOG || ALOX_REL_LOG
    UT_INIT();
    Log.SetVerbosity( tutLog= new MemoryLogger( "Tutlog" ), Verbosity.Verbose, "/" );
    tutLog.MultiLineMsgMode= 4;

    //! [Tut_XML]
    String xmltext= "<MainTag>"
                        +"<SubTag>Hello ALox XML</SubTag>"
                        +"<SubTag2>"
                            +"<SubsubTag>A sub tags' string</SubsubTag>"
                        +"</SubTag2>"
                    +"</MainTag>";
    XDocument xdoc= XDocument.Parse( xmltext );

    LogTools.XML("MYDOM", Verbosity.Info, xdoc, "Logging an xml document: " );
    //! [Tut_XML]

    tutLog.MemoryLog.SearchAndReplace( "Tutlog", "CONSOLE" );
    SaveTutorialOutput( "Tut_XML.txt", tutLog.MemoryLog );
#endif
}
 void LOG_CHECK( String dom, String exp, MemoryLogger ml, Lox lox )
 {
     ml.MemoryLog._(); ml.AutoSizes.Reset();
     lox.Info( dom, "" );
     UT_EQ( exp , ml.MemoryLog );
 }
public void Tut_HierDom()
{
    UT_INIT();

    Log.SetVerbosity( tutLog= new MemoryLogger( "Tutlog" ), Verbosity.Verbose );

    //! [Tut_DomainsHierarchical]
    Log.AddDebugLogger();
    Log.SetVerbosity( Log.DebugLogger, Verbosity.Verbose ); // the default anyhow
    //...
    Log.Info   ( "UI/MOUSE",   "A mouse click" );
    //...
    Log.Verbose( "UI/MOUSE",   "Somebody moved the mouse!" );
    //...
    //...
    Log.Info   ( "UI/DLG",     "About dialog opend" );
    //...
    Log.Verbose( "UI/DLG",     "About dialog, link to product page pressed." );
    //...
    //! [Tut_DomainsHierarchical]


    #if (ALOX_DBG_LOG || ALOX_REL_LOG)
        SaveTutorialOutput( "Tut_DomainsHierarchical.txt", tutLog.MemoryLog );
        tutLog.MemoryLog.Clear(); tutLog.CntLogs= 0;
        Log.RemoveDebugLogger();
    #endif

    //! [Tut_DomainsHierarchical_2]
    Log.SetVerbosity( Log.DebugLogger, Verbosity.Warning, "UI"  ); // Always sets all sub-domains!
    //! [Tut_DomainsHierarchical_2]

    //! [Tut_DomainsHierarchical_3]
    Log.SetVerbosity( Log.DebugLogger, Verbosity.Warning, "UI"       ); // First set parent...
    Log.SetVerbosity( Log.DebugLogger, Verbosity.Verbose, "UI/MOUSE" ); // ...then children!
    //! [Tut_DomainsHierarchical_3]

    Log.RemoveLogger( tutLog );
}
public void Tut_ScopeDomains()
{
    UT_INIT();

    Log.SetVerbosity( tutLog= new MemoryLogger( "Tutlog" ), Verbosity.Verbose );
    Log.AddDebugLogger();

    TutScopeDom tsd= new TutScopeDom();
    tsd.Extract( "myfile.zip", null );

    #if (ALOX_DBG_LOG || ALOX_REL_LOG)
    SaveTutorialOutput( "Tut_ScopeDomains.txt", tutLog.MemoryLog );
    tutLog.MemoryLog.Clear(); tutLog.CntLogs= 0;
    #endif

    // do it once to set the tab positions of the meta info...
    {
        Zipper zip= new Zipper();
        zip.Compress( "myfile.zip", null );
        zip.Extract( "myfile.zip", null );
        #if (ALOX_DBG_LOG || ALOX_REL_LOG)
        tutLog.MemoryLog.Clear(); tutLog.CntLogs= 0;
        #endif
    }
    // ...and again
    {
        Zipper zip= new Zipper();
        zip.Compress( "myfile.zip", null );
        zip.Extract( "myfile.zip", null );
    }

    #if (ALOX_DBG_LOG || ALOX_REL_LOG)
    SaveTutorialOutput( "Tut_ScopeDomains_Zipper.txt", tutLog.MemoryLog );
    #endif

    //---------- with scope path ---------------

    //! [Tut_ScopeDomains_Path]
    Log.SetDomain( "UTIL", Scope.Path );
    //! [Tut_ScopeDomains_Path]

    #if (ALOX_DBG_LOG || ALOX_REL_LOG)
    tutLog.MemoryLog.Clear(); tutLog.CntLogs= 0;
    #endif
    // do it once to set the tab positions of the meta info...
    {
        Zipper zip= new Zipper();
        zip.Compress( "myfile.zip", null );
        zip.Extract( "myfile.zip", null );
        #if (ALOX_DBG_LOG || ALOX_REL_LOG)
        tutLog.MemoryLog.Clear(); tutLog.CntLogs= 0; tutLog.CntLogs= 0;
        #endif
    }
    // ...and again
    {
        Zipper zip= new Zipper();
        zip.Compress( "myfile.zip", null );
        zip.Extract( "myfile.zip", null );
    }
    #if (ALOX_DBG_LOG || ALOX_REL_LOG)
    SaveTutorialOutput( "Tut_ScopeDomains_Zipper_Path.txt", tutLog.MemoryLog );
    tutLog.MemoryLog.Clear(); tutLog.CntLogs= 0;
    #endif

    Log.SetDomain( null, Scope.Path );
    Log.SetDomain( null, Scope.Filename );

    //! [Tut_ScopeDomains_ParamDom]
    Log.SetDomain( "METHOD", Scope.Method );
    Log.Info(          "No domain parameter given" );
    Log.Info( "PARAM", "Domain parameter \"PARAM\" given" );
    //! [Tut_ScopeDomains_ParamDom]

    // clear autosizes, repeat it twice
    #if (ALOX_DBG_LOG || ALOX_REL_LOG)
    tutLog.AutoSizes.Reset();
    #endif
    Log.Info(          "No domain parameter given" );
    Log.Info( "PARAM", "Domain parameter \"PARAM\" given" );
    tutLog.MemoryLog.Clear(); tutLog.CntLogs= 0;
    Log.Info(          "No domain parameter given" );
    Log.Info( "PARAM", "Domain parameter \"PARAM\" given" );

    #if (ALOX_DBG_LOG || ALOX_REL_LOG)
    SaveTutorialOutput( "Tut_ScopeDomains_ParamDom.txt", tutLog.MemoryLog );
    tutLog.MemoryLog.Clear(); tutLog.CntLogs= 0;
    #endif


    //! [Tut_ScopeDomains_ParamDom_2]
    Log.SetDomain( "READ", Scope.Method );
    Log.Info( "Reading file" );
    //...
    //...
    Log.Info( "/CONFIG",   "Path not found." );
    //...
    //! [Tut_ScopeDomains_ParamDom_2]

    #if (ALOX_DBG_LOG || ALOX_REL_LOG)
    SaveTutorialOutput( "Tut_ScopeDomains_ParamDom_2.txt", tutLog.MemoryLog );
    #endif

    Log.RemoveLogger( tutLog );
}
    public void Log_LineFormat()
    {
        #if ALOX_DBG_LOG || ALOX_REL_LOG
        UT_INIT();

        Log.AddDebugLogger();

        MemoryLogger testML= new MemoryLogger();

        Log.SetDomain( "/FMT", Scope.Method );
        Log.SetVerbosity( Log.DebugLogger, Verbosity.Verbose, "/FMT");
        Log.SetVerbosity( testML,          Verbosity.Verbose, "/FMT");

        Log.Info( "This is the default ConsoleLogger log line" );



        AString  lf;
        lf= new AString( "%SF(%SL):%SM()%A3[%D][%TD][%TC +%TL][%tN]%V[%D]<%#>: ");    Log.DebugLogger.MetaInfo.Format= lf;    Log.Info( "LineFormat set to= \"" + lf + "\"" );
        lf= new AString( "%SF(%SL):%A3[%D][%TD][%TC +%TL][%tN]%V[%D]<%#>: ");         Log.DebugLogger.MetaInfo.Format= lf;    Log.Info( "LineFormat set to= \"" + lf + "\"" );
        lf= new AString( "%SF(%SL):%A3[%TD][%TC +%TL][%tN]%V[%D]<%#>: ");             Log.DebugLogger.MetaInfo.Format= lf;    Log.Info( "LineFormat set to= \"" + lf + "\"" );
        lf= new AString( "%SF(%SL):%A3[%TC +%TL][%tN]%V[%D]<%#>: ");                  Log.DebugLogger.MetaInfo.Format= lf;    Log.Info( "LineFormat set to= \"" + lf + "\"" );
        lf= new AString( "%SF(%SL):%A3[+%TL][%tN]%V[%D]<%#>: ");                      Log.DebugLogger.MetaInfo.Format= lf;    Log.Info( "LineFormat set to= \"" + lf + "\"" );
        lf= new AString( "%SF(%SL):%A3[%tN]%V[%D]<%#>: ");                            Log.DebugLogger.MetaInfo.Format= lf;    Log.Info( "LineFormat set to= \"" + lf + "\"" );
        lf= new AString( "%SF(%SL):%A3 %V[%D]<%#>: ");                                Log.DebugLogger.MetaInfo.Format= lf;    Log.Info( "LineFormat set to= \"" + lf + "\"" );
        lf= new AString( "%SF(%SL):%A3[%D]<%#>: ");                                   Log.DebugLogger.MetaInfo.Format= lf;    Log.Info( "LineFormat set to= \"" + lf + "\"" );
        lf= new AString( "%SF(%SL):%A3[%D]: ");                                       Log.DebugLogger.MetaInfo.Format= lf;    Log.Info( "LineFormat set to= \"" + lf + "\"" );
        lf= new AString( "%SF:%A3[%D]: ");                                            Log.DebugLogger.MetaInfo.Format= lf;    Log.Info( "LineFormat set to= \"" + lf + "\"" );
        lf= new AString( "[%D]: ");                                                   Log.DebugLogger.MetaInfo.Format= lf;    Log.Info( "LineFormat set to= \"" + lf + "\"" );
        lf= new AString( "");                                                         Log.DebugLogger.MetaInfo.Format= lf;    Log.Info( "LineFormat set to= \"" + lf + "\"" );


        Log.DebugLogger.MetaInfo.Format._()._( "%TD@" );
        testML.MetaInfo.Format._()._( "%TD@" );
        String df;
        df= ">yy-MM-dd<";    Log.DebugLogger.MetaInfo.DateFormat= df;                                                Log.Info( "Date test. Format: \""+ df + '\"' );
        testML.MemoryLog.Clear();
        df= ">yyyy/dd/MM<";  Log.DebugLogger.MetaInfo.DateFormat= df;  testML.MetaInfo.DateFormat= df;             Log.Info( "FMT", "Date test. Format: \""+ df + '\"' );
        UT_TRUE( testML.MemoryLog.SearchAndReplace( "/", "@") == 4 );

        Log.DebugLogger.MetaInfo.Format._()._( "%TT@" );
        testML.MetaInfo.Format._()._( "%TT@" );
        df= ">HH:mm:ss<";    Log.DebugLogger.MetaInfo.TimeOfDayFormat= df;                                           Log.Info( "FMT", "Time of day test Format: \""+ df + '\"' );
        testML.MemoryLog.Clear();
        df= ">HH-mm-ss<";    Log.DebugLogger.MetaInfo.TimeOfDayFormat= df;  testML.MetaInfo.TimeOfDayFormat= df;   Log.Info( "FMT", "Time of day test. Format: \"" + df + '\"' );
        UT_TRUE( testML.MemoryLog.SearchAndReplace( "-", "@") == 4 );


        Log.DebugLogger.MetaInfo.Format._()._( "%P" );
                 testML.MetaInfo.Format._()._( "%P" );
        testML.MemoryLog.Clear(); testML.AutoSizes.Reset(); Log.Info("");  UT_TRUE(    testML.MemoryLog.IndexOf( ".Net45-NUnit"    ) >= 0
                                                                                    || testML.MemoryLog.IndexOf( "UnitTestAdapter" ) >= 0   );

        Log.DebugLogger.MetaInfo.Format._()._( "%LX" );
                 testML.MetaInfo.Format._()._( "%LX" );
        testML.MemoryLog.Clear(); testML.AutoSizes.Reset(); Log.Info("");  UT_EQ( "LOG"     ,testML.MemoryLog );

        Log.DebugLogger.MetaInfo.Format._()._( "%LG" );
                 testML.MetaInfo.Format._()._( "%LG" );
        testML.MemoryLog.Clear(); testML.AutoSizes.Reset(); Log.Info("");  UT_EQ( "MEMORY"  , testML.MemoryLog );

        #endif
    }