示例#1
0
        private void StampFormatter(LogItem item)
        {
            var original_foreground = Console.ForegroundColor;
            var original_background = Console.BackgroundColor;

            var level_color = item.Level switch
            {
                LogLevel.Information => item.Configuration.Theme.InfoColor,
                LogLevel.Warning => item.Configuration.Theme.WarnColor,
                LogLevel.Error => item.Configuration.Theme.ErrorColor,
                LogLevel.Critical => item.Configuration.Theme.CriticalColor,
                LogLevel.Debug => item.Configuration.Theme.DebugColor,
                LogLevel.Trace => item.Configuration.Theme.TraceColor,
                LogLevel.None => ConsoleColor.Gray,

                _ => ConsoleColor.Gray
            };

            Console.ForegroundColor = item.Configuration.Theme.BracketColor;
            Write("[");
            Console.ForegroundColor = level_color;
            Write(item.Level);
            Console.ForegroundColor = item.Configuration.Theme.BracketColor;
            Write("]");
            Console.ForegroundColor = original_foreground;

            Console.ForegroundColor = item.Configuration.Theme.BracketColor;
            Write("[");
            Console.ForegroundColor = item.Configuration.Theme.TimeStampColor;
            Write(item.TimeStamp.ToString(item.Configuration.TimeStampFormat));
            Console.ForegroundColor = item.Configuration.Theme.BracketColor;
            Write("]");
            Console.ForegroundColor = original_foreground;

            var name = item.Name;

            foreach (var trim in item.Configuration.TrimNames)
            {
                if (name.StartsWith(trim))
                {
                    name = name.Replace(trim, string.Empty);
                    break;
                }
            }
            foreach (var(val, repl) in item.Configuration.ReplaceNames)
            {
                if (name == val)
                {
                    name = repl;
                    break;
                }
            }

            if (!string.IsNullOrEmpty(name))
            {
                Console.ForegroundColor = item.Configuration.Theme.BracketColor;
                Write("[");
                Console.ForegroundColor = item.Configuration.Theme.NameColor;
                Write(name);
                if (item.Id != 0)
                {
                    Write("(");
                    Write(item.Id);
                    Write(")");
                }
                Console.ForegroundColor = item.Configuration.Theme.BracketColor;
                Write("]");
                Console.ForegroundColor = original_foreground;
            }

            Write(" ");
        }
示例#2
0
 public void PreLog(LogItem item)
 {
 }
示例#3
0
 public void PostLog(LogItem item)
 {
     Console.ForegroundColor = original_foreground_color;
     Console.BackgroundColor = original_background_color;
 }
示例#4
0
        private static async Task LogHandler()
        {
            LogItem?n_item = null;

            while (static_config is null)
            {
                await Task.Delay(15);
            }

            var config    = static_config;
            var formatter = config.FormatterFactory();

            while (!config.Token.IsCancellationRequested)
            {
                try
                {
                    while (queue.IsEmpty)
                    {
                        await Task.Delay(15);

                        continue;
                    }

                    var success = queue.TryDequeue(out n_item);
                    if (!success || n_item is null)
                    {
                        continue;
                    }

                    lock (console_lock)
                    {
                        if (!(replacement_static_config is null))
                        {
                            config    = replacement_static_config;
                            formatter = config.FormatterFactory();
                            replacement_static_config = null;
                        }

                        var item = n_item;
                        n_item = null;

                        formatter.PreLog(item);
                        formatter.Format(item);
                        formatter.PostLog(item);

                        if (queue.Count > config.InternalLoggerQueueOverloadThreshold)
                        {
                            item = new LogItem(
                                config,
                                LogLevel.Warning,
                                0,
                                nameof(SolaceConsoleLogger),
                                "WARNING! LOG BUFFER IS OVERLOADED!",
                                null
                                );

                            formatter.PreLog(item);
                            formatter.Format(item);
                            formatter.PostLog(item);
                        }
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine($"ERROR IN SOLACE CONSOLE LOGGER: {e}");
                }
            }

            Console.ResetColor();

            if (config.LogLevel == LogLevel.Trace)
            {
                Console.WriteLine("Stopping logger.");
            }
        }