public void HandleConsoleSink(ConsoleSink _)
        {
            var consoleSink = "console-sink-formatter";
            var msg         = new ConsoleSinkFormatter.MessageQueueStats(_.Payload);

            Context.Child(consoleSink).GetOrElse(() => Context.ActorOf(ConsoleSinkFormatter.Props(), consoleSink)).Tell(msg);
        }
 public void LogSinkExtensions_GetSinkType()
 {
     ConsoleSink sink = new ConsoleSink();
     LogSinkTypeAttribute attribute = sink.GetLogSinkType();
     Assert.IsNotNull(attribute);
     Assert.AreEqual("console", attribute.Name);
 }
예제 #3
0
        public static void FullMode_SetInvalid_Throws()
        {
            // Arrange
            var sink      = new ConsoleSink();
            var console   = new TestConsole(sink);
            var processor = new ConsoleLoggerProcessor(console, null !, ConsoleLoggerQueueFullMode.Wait, 1024);

            // Act & Assert
            Assert.Throws <ArgumentOutOfRangeException>(() => processor.FullMode = (ConsoleLoggerQueueFullMode)10);
        }
예제 #4
0
        private static (ConsoleLogger Logger, ConsoleSink Sink) SetUp(Func <string, LogLevel, bool> filter, bool includeScopes = false)
        {
            // Arrange
            var sink    = new ConsoleSink();
            var console = new TestConsole(sink);
            var logger  = new ConsoleLogger(_loggerName, filter, includeScopes, new TestLoggerProcessor());

            logger.Console = console;
            return(logger, sink);
        }
예제 #5
0
        private Tuple <ConsoleLogger, ConsoleSink> SetUp(Func <string, LogLevel, bool> filter, bool includeScopes = false)
        {
            // Arrange
            var sink    = new ConsoleSink();
            var console = new TestConsole(sink);
            var logger  = new ConsoleLogger(_loggerName, filter, includeScopes);

            logger.Console = console;
            return(new Tuple <ConsoleLogger, ConsoleSink>(logger, sink));
        }
예제 #6
0
        /// <summary>
        /// Subscribes to an <see cref="IObservable{EventEntry}"/> using a <see cref="ConsoleSink"/>.
        /// </summary>
        /// <param name="eventStream">The event stream. Typically this is an instance of <see cref="ObservableEventListener"/>.</param>
        /// <param name="formatter">The formatter.</param>
        /// <param name="colorMapper">The color mapper instance.</param>
        /// <returns>A subscription to the sink that can be disposed to unsubscribe the sink, or to get access to the sink instance.</returns>
        public static SinkSubscription <ConsoleSink> LogToConsole(this IObservable <EventEntry> eventStream, IEventTextFormatter formatter = null, IConsoleColorMapper colorMapper = null)
        {
            formatter   = formatter ?? new EventTextFormatter();
            colorMapper = colorMapper ?? new DefaultConsoleColorMapper();

            var sink = new ConsoleSink(formatter, colorMapper);

            var subscription = eventStream.Subscribe(sink);

            return(new SinkSubscription <ConsoleSink>(subscription, sink));
        }
예제 #7
0
파일: ConsoleLog.cs 프로젝트: Brar/entlib
        /// <summary>
        /// Subscribes to an <see cref="IObservable{EventEntry}"/> using a <see cref="ConsoleSink"/>.
        /// </summary>
        /// <param name="eventStream">The event stream. Typically this is an instance of <see cref="ObservableEventListener"/>.</param>
        /// <param name="formatter">The formatter.</param>
        /// <param name="colorMapper">The color mapper instance.</param>
        /// <returns>A subscription to the sink that can be disposed to unsubscribe the sink, or to get access to the sink instance.</returns>
        public static SinkSubscription<ConsoleSink> LogToConsole(this IObservable<EventEntry> eventStream, IEventTextFormatter formatter = null, IConsoleColorMapper colorMapper = null)
        {
            var sink = new ConsoleSink();

            formatter = formatter ?? new EventTextFormatter();
            colorMapper = colorMapper ?? new DefaultConsoleColorMapper();

            var subscription = eventStream.SubscribeWithFormatterAndColor(formatter ?? new EventTextFormatter(), colorMapper, sink);

            return new SinkSubscription<ConsoleSink>(subscription, sink);
        }
예제 #8
0
        private static (ConsoleLogger Logger, ConsoleSink Sink) SetUp(Func <string, LogLevel, bool> filter, bool includeScopes = false, bool disableColors = false)
        {
            // Arrange
            var sink    = new ConsoleSink();
            var console = new TestConsole(sink);
            var logger  = new ConsoleLogger(_loggerName, filter, includeScopes ? new LoggerExternalScopeProvider() : null, new TestLoggerProcessor());

            logger.Console       = console;
            logger.DisableColors = disableColors;
            return(logger, sink);
        }
예제 #9
0
        private static Tuple <AdvancedConsoleLogger, ConsoleSink> SetUp(Func <string, LogLevel, bool> filter, bool includeScopes = false)
        {
            // Arrange
            var sink     = new ConsoleSink();
            var console  = new TestConsole(sink);
            var settings = ConsoleLoggerSettings.Default;

            settings.IncludeScopes = includeScopes;
            var logger = new AdvancedConsoleLogger(_loggerName, filter, settings);

            logger.Console = console;
            return(new Tuple <AdvancedConsoleLogger, ConsoleSink>(logger, sink));
        }
예제 #10
0
        internal static (ConsoleLogger Logger, ConsoleSink Sink, ConsoleSink ErrorSink, Func <LogLevel, string> GetLevelPrefix, int WritesPerMsg) SetUp(
            ConsoleLoggerOptions options = null,
            SimpleConsoleFormatterOptions simpleOptions = null,
            ConsoleFormatterOptions systemdOptions      = null,
            JsonConsoleFormatterOptions jsonOptions     = null)
        {
            // Arrange
            var sink                   = new ConsoleSink();
            var errorSink              = new ConsoleSink();
            var console                = new TestConsole(sink);
            var errorConsole           = new TestConsole(errorSink);
            var consoleLoggerProcessor = new TestLoggerProcessor();

            consoleLoggerProcessor.Console      = console;
            consoleLoggerProcessor.ErrorConsole = errorConsole;

            var logger = new ConsoleLogger(_loggerName, consoleLoggerProcessor);

            logger.ScopeProvider = new LoggerExternalScopeProvider();
            logger.Options       = options ?? new ConsoleLoggerOptions();
            var formatters = new ConcurrentDictionary <string, ConsoleFormatter>(ConsoleLoggerTest.GetFormatters(simpleOptions, systemdOptions, jsonOptions).ToDictionary(f => f.Name));

            Func <LogLevel, string> levelAsString;
            int writesPerMsg;

            switch (logger.Options.FormatterName)
            {
            case ConsoleFormatterNames.Simple:
                levelAsString    = ConsoleLoggerTest.LogLevelAsStringDefault;
                writesPerMsg     = 2;
                logger.Formatter = formatters[ConsoleFormatterNames.Simple];
                break;

            case ConsoleFormatterNames.Systemd:
                levelAsString    = ConsoleLoggerTest.GetSyslogSeverityString;
                writesPerMsg     = 1;
                logger.Formatter = formatters[ConsoleFormatterNames.Systemd];
                break;

            case ConsoleFormatterNames.Json:
                levelAsString    = ConsoleLoggerTest.GetJsonLogLevelString;
                writesPerMsg     = 1;
                logger.Formatter = formatters[ConsoleFormatterNames.Json];
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(logger.Options.FormatterName));
            }

            return(logger, sink, errorSink, levelAsString, writesPerMsg);
        }
예제 #11
0
        public void AddProduct(ProductAddDTO Data)
        {
            ConsoleSink    sink = new ConsoleSink(this._Sink, ConsoleColor.Red);
            ProductService svc  = new ProductService(_ConnectionString, sink);

            if (svc.Add(Data))
            {
                Console.WriteLine("-- ! WebApi Singapore Say Success Add Product" + Environment.NewLine);
            }
            else
            {
                Console.WriteLine("-- ! WebApi Singapore Say Failed Add Product" + Environment.NewLine);
            }
        }
예제 #12
0
        private (AdvancedConsoleLogger logger, ConsoleSink sink) SetUp(
            Func <string, LogLevel, bool> filter,
            ConsoleLoggerSettings settings)
        {
            // Arrange
            var sink    = new ConsoleSink();
            var console = new TestConsole(sink);

            var logger = new AdvancedConsoleLogger(_loggerName, filter, settings);

            logger.Console = console;

            return(logger, sink);
        }
예제 #13
0
        internal static (ConsoleLogger Logger, ConsoleSink Sink, ConsoleSink ErrorSink, Func <LogLevel, string> GetLevelPrefix, int WritesPerMsg) SetUp(
            ConsoleLoggerOptions options = null,
            SimpleConsoleFormatterOptions simpleOptions = null,
            ConsoleFormatterOptions systemdOptions      = null,
            JsonConsoleFormatterOptions jsonOptions     = null)
        {
            // Arrange
            var sink                   = new ConsoleSink();
            var errorSink              = new ConsoleSink();
            var console                = new TestConsole(sink);
            var errorConsole           = new TestConsole(errorSink);
            var bufferMode             = options == null ? ConsoleLoggerQueueFullMode.Wait : options.QueueFullMode;
            var maxQueueLength         = options == null ? ConsoleLoggerOptions.DefaultMaxQueueLengthValue : options.MaxQueueLength;
            var consoleLoggerProcessor = new TestLoggerProcessor(console, errorConsole, bufferMode, maxQueueLength);

            var formatters = new ConcurrentDictionary <string, ConsoleFormatter>(ConsoleLoggerTest.GetFormatters(simpleOptions, systemdOptions, jsonOptions).ToDictionary(f => f.Name));

            ConsoleFormatter?formatter = null;
            var loggerOptions          = options ?? new ConsoleLoggerOptions();
            Func <LogLevel, string> levelAsString;
            int writesPerMsg;

            switch (loggerOptions.FormatterName)
            {
            case ConsoleFormatterNames.Simple:
                levelAsString = ConsoleLoggerTest.LogLevelAsStringDefault;
                writesPerMsg  = 2;
                formatter     = formatters[ConsoleFormatterNames.Simple];
                break;

            case ConsoleFormatterNames.Systemd:
                levelAsString = ConsoleLoggerTest.GetSyslogSeverityString;
                writesPerMsg  = 1;
                formatter     = formatters[ConsoleFormatterNames.Systemd];
                break;

            case ConsoleFormatterNames.Json:
                levelAsString = ConsoleLoggerTest.GetJsonLogLevelString;
                writesPerMsg  = 1;
                formatter     = formatters[ConsoleFormatterNames.Json];
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(loggerOptions.FormatterName));
            }
            var logger = new ConsoleLogger(_loggerName, consoleLoggerProcessor, formatter, new LoggerExternalScopeProvider(), loggerOptions);

            return(logger, sink, errorSink, levelAsString, writesPerMsg);
        }
예제 #14
0
        public void LogAfterDisposeWritesLog()
        {
            // Arrange
            var sink      = new ConsoleSink();
            var console   = new TestConsole(sink);
            var processor = new ConsoleLoggerProcessor();
            var logger    = new ConsoleLogger(_loggerName, filter: null, includeScopes: false, loggerProcessor: processor);

            logger.Console = console;

            // Act
            processor.Dispose();
            logger.LogInformation("Logging after dispose");

            // Assert
            Assert.True(sink.Writes.Count == 2);
        }
예제 #15
0
        private static (ConsoleLogger Logger, ConsoleSink Sink, ConsoleSink ErrorSink) SetUp(ConsoleLoggerOptions options = null)
        {
            // Arrange
            var sink                   = new ConsoleSink();
            var errorSink              = new ConsoleSink();
            var console                = new TestConsole(sink);
            var errorConsole           = new TestConsole(errorSink);
            var consoleLoggerProcessor = new TestLoggerProcessor();

            consoleLoggerProcessor.Console      = console;
            consoleLoggerProcessor.ErrorConsole = errorConsole;

            var logger = new ConsoleLogger(_loggerName, consoleLoggerProcessor);

            logger.ScopeProvider = new LoggerExternalScopeProvider();
            logger.Options       = options ?? new ConsoleLoggerOptions();
            return(logger, sink, errorSink);
        }
예제 #16
0
        public static void Main(string[] args)
        {
            var sink      = new ConsoleSink();
            var chooser   = new ConsoleChooser();
            var envParams = new EnvParams();

            using (var ci = new CommandInterface(sink, chooser, envParams))
            {
                Console.CancelKeyPress += (x, y) =>
                {
                    y.Cancel = true;
                    ci.Cancel();
                };

                //// If errors occured while parsing switches
                //// then treat this an exit condition.
                bool isExit;
                ci.DoOptions(out isExit);
                if (isExit || sink.PrintedError)
                {
                    Environment.ExitCode = sink.PrintedError ? 1 : 0;
                    return;
                }

                string line;
                while (true)
                {
                    //// Because pressing CTRL-C may return a null line
                    line = Console.ReadLine();
                    line = line == null ? string.Empty : line.Trim();
                    if (line == CommandInterface.ExitCommand ||
                        line == CommandInterface.ExitShortCommand)
                    {
                        Environment.ExitCode = sink.PrintedError ? 1 : 0;
                        return;
                    }

                    ci.DoCommand(line);
                }
            }
        }
예제 #17
0
        public void LogAfterDisposeWritesLog()
        {
            // Arrange
            var sink      = new ConsoleSink();
            var console   = new TestConsole(sink);
            var processor = new ConsoleLoggerProcessor(console, null !, ConsoleLoggerQueueFullMode.Wait, 1024);

            var logger = new ConsoleLogger(_loggerName, loggerProcessor: processor,
                                           new SimpleConsoleFormatter(new TestFormatterOptionsMonitor <SimpleConsoleFormatterOptions>(new SimpleConsoleFormatterOptions())),
                                           null, new ConsoleLoggerOptions());

            Assert.Null(logger.Options.FormatterName);
            UpdateFormatterOptions(logger.Formatter, logger.Options);

            // Act
            processor.Dispose();
            logger.LogInformation("Logging after dispose");

            // Assert
            Assert.Equal(2, sink.Writes.Count);
        }
예제 #18
0
        private static (ConsoleLogger Logger, ConsoleSink Sink, ConsoleSink ErrorSink, Func <LogLevel, string> GetLevelPrefix, int WritesPerMsg) SetUp(ConsoleLoggerOptions options = null)
        {
            // Arrange
            var sink                   = new ConsoleSink();
            var errorSink              = new ConsoleSink();
            var console                = new TestConsole(sink);
            var errorConsole           = new TestConsole(errorSink);
            var consoleLoggerProcessor = new TestLoggerProcessor();

            consoleLoggerProcessor.Console      = console;
            consoleLoggerProcessor.ErrorConsole = errorConsole;

            var logger = new ConsoleLogger(_loggerName, consoleLoggerProcessor);

            logger.ScopeProvider = new LoggerExternalScopeProvider();
            logger.Options       = options ?? new ConsoleLoggerOptions();
            Func <LogLevel, string> levelAsString;
            int writesPerMsg;

            switch (logger.Options.Format)
            {
            case ConsoleLoggerFormat.Default:
                levelAsString = LogLevelAsStringDefault;
                writesPerMsg  = 2;
                break;

            case ConsoleLoggerFormat.Systemd:
                levelAsString = GetSyslogSeverityString;
                writesPerMsg  = 1;
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(logger.Options.Format));
            }
            return(logger, sink, errorSink, levelAsString, writesPerMsg);
        }
예제 #19
0
        public void CheckForNotificationWhenQueueIsFull(bool okToDrop)
        {
            // Arrange
            var    sink         = new ConsoleSink();
            var    console      = new TestConsole(sink);
            var    errorConsole = new TimesWriteCalledConsole();
            string queueName    = nameof(CheckForNotificationWhenQueueIsFull) + (okToDrop ? "InDropWriteMode" : "InWaitMode");
            var    fullMode     = okToDrop ? ConsoleLoggerQueueFullMode.DropWrite : ConsoleLoggerQueueFullMode.Wait;
            var    processor    = new ConsoleLoggerProcessor(console, errorConsole, fullMode, maxQueueLength: 1);
            var    formatter    = new SimpleConsoleFormatter(new TestFormatterOptionsMonitor <SimpleConsoleFormatterOptions>(
                                                                 new SimpleConsoleFormatterOptions()));

            var logger = new ConsoleLogger(_loggerName, processor, formatter, null, new ConsoleLoggerOptions());

            Assert.Null(logger.Options.FormatterName);
            UpdateFormatterOptions(logger.Formatter, logger.Options);
            string messageTemplate = string.Join(", ", Enumerable.Range(1, 100).Select(x => "{A" + x + "}"));

            object[] messageParams = Enumerable.Range(1, 100).Select(x => (object)x).ToArray();

            // Act
            for (int i = 0; i < 20000; i++)
            {
                logger.LogInformation(messageTemplate, messageParams);
            }

            // Assert
            if (okToDrop)
            {
                Assert.True(errorConsole.TimesWriteCalled > 0);
            }
            else
            {
                Assert.Equal(0, errorConsole.TimesWriteCalled);
            }
        }
예제 #20
0
        private string GetMessage(ConsoleSink sink, int messageIndex, int?writesCount = null)
        {
            int count = writesCount ?? _writesPerMsgDefault;

            return(GetMessage(sink.Writes.GetRange(messageIndex * count, count)));
        }
예제 #21
0
 public ConsoleLogger(ILoggerSink sink)
 {
     _Sink = sink as ConsoleSink;
 }