public SimpleLatencyBenchmarkResult Bench(int warmingMessageCount, int totalMessageCount, int producingThreadCount)
        {
            var appender = new NLogTestTarget(false);

            var config = new LoggingConfiguration();

            config.AddTarget(nameof(appender), appender);
            config.LoggingRules.Add(new LoggingRule(nameof(appender), LogLevel.Debug, appender));
            NLog.LogManager.Configuration = config;
            NLog.LogManager.ReconfigExistingLoggers();

            var logger = NLog.LogManager.GetLogger(nameof(appender));


            var signal = appender.SetMessageCountTarget(totalMessageCount);

            var produce = new Func <HistogramBase>(() =>
            {
                var warmingMessageByProducer = warmingMessageCount / producingThreadCount;
                int[] counter     = { 0 };
                var warmingResult = SimpleLatencyBenchmark.Bench(() => logger.Info("Hi {0} ! It's {1:HH:mm:ss}, and the message is #{2}", "dude", DateTime.UtcNow, counter[0]++), warmingMessageByProducer);

                var messageByProducer = totalMessageCount / producingThreadCount;
                counter[0]            = 0;
                return(SimpleLatencyBenchmark.Bench(() => logger.Info("Hi {0} ! It's {1:HH:mm:ss}, and the message is #{2}", "dude", DateTime.UtcNow, counter[0]++), messageByProducer));
            });

            var result = SimpleLatencyBenchmark.RunBench(producingThreadCount, produce, signal);

            LogManager.Shutdown();

            return(result);
        }
Exemple #2
0
        public SimpleLatencyBenchmarkResult Bench(int warmingMessageCount, int totalMessageCount, int producingThreadCount)
        {
            var repository = log4net.LogManager.GetRepository(Assembly.GetExecutingAssembly());

            var layout = new PatternLayout("%-4timestamp [%thread] %-5level %logger %ndc - %message%newline");

            layout.ActivateOptions();
            var appender = new Log4NetTestAppender(false);

            appender.ActivateOptions();
            BasicConfigurator.Configure(repository, appender);

            var logger = log4net.LogManager.GetLogger(repository.Name, nameof(appender));
            var signal = appender.SetMessageCountTarget(totalMessageCount + warmingMessageCount);

            var produce = new Func <HistogramBase>(() =>
            {
                var warmingMessageByProducer = warmingMessageCount / producingThreadCount;
                int[] counter     = { 0 };
                var warmingResult = SimpleLatencyBenchmark.Bench(() => logger.InfoFormat("Hi {0} ! It's {1:HH:mm:ss}, and the message is #{2}", "dude", DateTime.UtcNow, counter[0]++), warmingMessageByProducer);

                var messageByProducer = totalMessageCount / producingThreadCount;
                counter[0]            = 0;
                return(SimpleLatencyBenchmark.Bench(() => logger.InfoFormat("Hi {0} ! It's {1:HH:mm:ss}, and the message is #{2}", "dude", DateTime.UtcNow, counter[0]++), messageByProducer));
            });

            return(SimpleLatencyBenchmark.RunBench(producingThreadCount, produce, signal));
        }
Exemple #3
0
        public SimpleLatencyBenchmarkResult Bench(int queueSize, int warmingMessageCount, int totalMessageCount, int producingThreadCount)
        {
            var appender = new Tests.TestAppender(false);

            BasicConfigurator.Configure(new[] { appender }, queueSize, logEventPoolExhaustionStrategy: LogEventPoolExhaustionStrategy.WaitForLogEvent);
            var logger = LogManager.GetLogger(nameof(ZeroLog));

            var signal = appender.SetMessageCountTarget(warmingMessageCount + totalMessageCount);

            var produce = new Func <HistogramBase>(() =>
            {
                var warmingMessageByProducer = warmingMessageCount / producingThreadCount;
                int[] counter     = { 0 };
                var warmingResult = SimpleLatencyBenchmark.Bench(() => logger.InfoFormat("Hi {0} ! It's {1:HH:mm:ss}, and the message is #{2}", "dude", DateTime.UtcNow, counter[0]++), warmingMessageByProducer);

                var messageByProducer = totalMessageCount / producingThreadCount;
                counter[0]            = 0;
                return(SimpleLatencyBenchmark.Bench(() => logger.InfoFormat("Hi {0} ! It's {1:HH:mm:ss}, and the message is #{2}", "dude", DateTime.UtcNow, counter[0]++), messageByProducer));
            });

            var result = SimpleLatencyBenchmark.RunBench(producingThreadCount, produce, signal);

            LogManager.Shutdown();

            return(result);
        }
        public List <HistogramBase> Bench(int warmingMessageCount, int totalMessageCount, int producingThreadCount)
        {
            var layout = new PatternLayout("%-4timestamp [%thread] %-5level %logger %ndc - %message%newline");

            layout.ActivateOptions();
            var appender = new Log4NetTestAppender(false);

            appender.ActivateOptions();
            BasicConfigurator.Configure(appender);

            var logger = log4net.LogManager.GetLogger(nameof(appender));


            var signal = appender.SetMessageCountTarget(totalMessageCount + warmingMessageCount);

            var produce = new Func <HistogramBase>(() =>
            {
                var warmingMessageByProducer = warmingMessageCount / producingThreadCount;
                var warmingResult            = SimpleLatencyBenchmark.Bench(i => logger.InfoFormat("Hi {0} ! It's {1:HH:mm:ss}, and the message is #{2}", "dude", DateTime.UtcNow, i), warmingMessageByProducer);

                var messageByProducer = totalMessageCount / producingThreadCount;
                return(SimpleLatencyBenchmark.Bench(i => logger.InfoFormat("Hi {0} ! It's {1:HH:mm:ss}, and the message is #{2}", "dude", DateTime.UtcNow, i), messageByProducer));
            });

            var tasks = new List <Task <HistogramBase> >();

            for (var i = 0; i < producingThreadCount; i++)
            {
                tasks.Add(Task.Factory.StartNew(produce, TaskCreationOptions.LongRunning));
            }

            signal.Wait(TimeSpan.FromSeconds(30));

            return(tasks.Select(x => x.Result).ToList());
        }
Exemple #5
0
        public List <HistogramBase> Bench(int queueSize, int warmingMessageCount, int totalMessageCount, int producingThreadCount)
        {
            var appender = new ZeroLog.Tests.TestAppender(false);

            BasicConfigurator.Configure(new[] { appender }, queueSize, logEventPoolExhaustionStrategy: LogEventPoolExhaustionStrategy.WaitForLogEvent);
            var logger = LogManager.GetLogger(nameof(ZeroLog));

            var signal = appender.SetMessageCountTarget(warmingMessageCount + totalMessageCount);

            var produce = new Func <HistogramBase>(() =>
            {
                var warmingMessageByProducer = warmingMessageCount / producingThreadCount;
                var warmingResult            = SimpleLatencyBenchmark.Bench(i => logger.InfoFormat("Hi {0} ! It's {1:HH:mm:ss}, and the message is #{2}", "dude", DateTime.UtcNow, i), warmingMessageByProducer);

                var messageByProducer = totalMessageCount / producingThreadCount;
                return(SimpleLatencyBenchmark.Bench(i => logger.InfoFormat("Hi {0} ! It's {1:HH:mm:ss}, and the message is #{2}", "dude", DateTime.UtcNow, i), messageByProducer));
            });

            var tasks = new List <Task <HistogramBase> >();

            for (var i = 0; i < producingThreadCount; i++)
            {
                tasks.Add(Task.Factory.StartNew(produce, TaskCreationOptions.LongRunning));
            }

            signal.Wait(TimeSpan.FromSeconds(30));
            LogManager.Shutdown();

            return(tasks.Select(x => x.Result).ToList());
        }
Exemple #6
0
        private static void LatencyMultiProducer(int threadCount, int warmupMessageCount, int messageCount, int queueSize)
        {
            var zeroLog   = new ZeroLogMultiProducer().Bench(queueSize, warmupMessageCount, messageCount, threadCount);
            var nlogSync  = new NLogSyncMultiProducer().Bench(warmupMessageCount, messageCount, threadCount);
            var nlogAsync = new NLogAsyncMultiProducer().Bench(queueSize, warmupMessageCount, messageCount, threadCount);
            var log4net   = new Log4NetMultiProducer().Bench(warmupMessageCount, messageCount, threadCount);

            SimpleLatencyBenchmark.PrintSummary($"{threadCount} producers, {messageCount} total log events (queue size={queueSize}) - unit is *us*",
                                                ("ZeroLog", zeroLog),
                                                ("NLogSync", nlogSync),
                                                ("NLogAsync", nlogAsync),
                                                ("Log4net", log4net));
        }
Exemple #7
0
        public List <HistogramBase> Bench(int queueSize, int warmingMessageCount, int totalMessageCount, int producingThreadCount)
        {
            var appender    = new NLogTestTarget(false);
            var asyncTarget = (new AsyncTargetWrapper(appender, queueSize, overflowAction: AsyncTargetWrapperOverflowAction.Block));

            var config = new LoggingConfiguration();

            config.AddTarget(nameof(asyncTarget), asyncTarget);
            config.LoggingRules.Add(new LoggingRule(nameof(asyncTarget), LogLevel.Debug, asyncTarget));
            NLog.LogManager.Configuration = config;
            NLog.LogManager.ReconfigExistingLoggers();

            var logger = NLog.LogManager.GetLogger(nameof(asyncTarget));


            var signal = appender.SetMessageCountTarget(warmingMessageCount + totalMessageCount);

            var produce = new Func <HistogramBase>(() =>
            {
                var warmingMessageByProducer = warmingMessageCount / producingThreadCount;
                var warmingResult            = SimpleLatencyBenchmark.Bench(i => logger.Info("Hi {0} ! It's {1:HH:mm:ss}, and the message is #{2}", "dude", DateTime.UtcNow, i), warmingMessageByProducer);

                var messageByProducer = totalMessageCount / producingThreadCount;
                return(SimpleLatencyBenchmark.Bench(i => logger.Info("Hi {0} ! It's {1:HH:mm:ss}, and the message is #{2}", "dude", DateTime.UtcNow, i), messageByProducer));
            });

            var flusher = new Action(() =>
            {
                while (!signal.IsSet)
                {
                    NLog.LogManager.Flush();
                }
            });

            Task.Factory.StartNew(flusher, TaskCreationOptions.LongRunning);

            var tasks = new List <Task <HistogramBase> >();

            for (var i = 0; i < producingThreadCount; i++)
            {
                tasks.Add(Task.Factory.StartNew(produce, TaskCreationOptions.LongRunning));
            }

            signal.Wait(TimeSpan.FromSeconds(30));
            LogManager.Shutdown();

            return(tasks.Select(x => x.Result).ToList());
        }
        public SimpleLatencyBenchmarkResult Bench(int queueSize, int warmingMessageCount, int totalMessageCount, int producingThreadCount)
        {
            var appender    = new NLogTestTarget(false);
            var asyncTarget = (new AsyncTargetWrapper(appender, queueSize, overflowAction: AsyncTargetWrapperOverflowAction.Block));

            var config = new LoggingConfiguration();

            config.AddTarget(nameof(asyncTarget), asyncTarget);
            config.LoggingRules.Add(new LoggingRule(nameof(asyncTarget), LogLevel.Debug, asyncTarget));
            NLog.LogManager.Configuration = config;
            NLog.LogManager.ReconfigExistingLoggers();

            var logger = NLog.LogManager.GetLogger(nameof(asyncTarget));


            var signal = appender.SetMessageCountTarget(warmingMessageCount + totalMessageCount);

            var produce = new Func <HistogramBase>(() =>
            {
                var warmingMessageByProducer = warmingMessageCount / producingThreadCount;
                int[] counter     = { 0 };
                var warmingResult = SimpleLatencyBenchmark.Bench(() => logger.Info("Hi {0} ! It's {1:HH:mm:ss}, and the message is #{2}", "dude", DateTime.UtcNow, counter[0]++), warmingMessageByProducer);

                var messageByProducer = totalMessageCount / producingThreadCount;
                counter[0]            = 0;
                return(SimpleLatencyBenchmark.Bench(() => logger.Info("Hi {0} ! It's {1:HH:mm:ss}, and the message is #{2}", "dude", DateTime.UtcNow, counter[0]++), messageByProducer));
            });

            var flusher = new Action(() =>
            {
                while (!signal.IsSet)
                {
                    NLog.LogManager.Flush();
                }
            });

            Task.Factory.StartNew(flusher, TaskCreationOptions.LongRunning);

            var result = SimpleLatencyBenchmark.RunBench(producingThreadCount, produce, signal);

            LogManager.Shutdown();

            return(result);
        }