Beispiel #1
0
        private static void InitWriters(string[] loggerParams, string fileName, bool useConsole)
        {
            if (loggerParams == null)
            {
                InitDefaultLoggers(fileName, useConsole);
                return;
            }

            Func <string, string> getKey   = s => s.GetMatches(@".+(?=\=)").First().Trim();
            Func <string, string> getValue = s => s.GetMatches(@"(?<=\=).+").First().Trim();

            try
            {
                string roolLevels = loggerParams.FirstOrDefault(s => s.IsMatch(@"RootLevels[\s]*="));
                if (!string.IsNullOrEmpty(roolLevels))
                {
                    levels = getValue(roolLevels).Split('|')
                             .Select(s =>
                    {
                        TraceMessageKind k = (TraceMessageKind)Enum.Parse(typeof(TraceMessageKind), s.Trim());
                        return(k);
                    })
                             .ToArray();
                }

                string loggerStr = loggerParams.FirstOrDefault(s => s.IsMatch(@"Loggers[\s]*="));
                if (string.IsNullOrEmpty(loggerStr))
                {
                    InitDefaultLoggers(fileName, useConsole);
                    return;
                }
                string[] loggers = getValue(loggerStr).Split(',').Select(s => s.Trim()).ToArray();
                foreach (string logger in loggers)
                {
                    Dictionary <string, object> curLogParams = loggerParams
                                                               .Where(s => s.IsMatch(string.Format(@"{0}\..*=", logger)))
                                                               .Select(s => s.ReplaceRegex(logger + @"\.", string.Empty))
                                                               .ToDictionary(s => getKey(s), s => (object)getValue(s));

                    curLogParams = UpdateWriterDict(fileName, curLogParams);
                    if (curLogParams == null)
                    {
                        continue;
                    }

                    // Пропускаем логгирование консоли, если она отключена
                    if (!useConsole && (WriterType)curLogParams["Type"] == WriterType.Console)
                    {
                        continue;
                    }

                    writers.Add(new Writer(curLogParams));
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Ошибка при разборе конфигурации логгеров", ex);
            }
        }
Beispiel #2
0
        /// <summary>
        /// Запись в логгер
        /// </summary>
        public void Write(string message, TraceMessageKind traceMessageKind, string category, int indentLevel)
        {
            // Если уровень логирование недопустимый, то пропускаем запись
            if (!levels.Contains(TraceMessageKind.All) && !levels.Contains(traceMessageKind))
            {
                return;
            }

            string[] words = category.Split('.');
            category = string.Join(".", words.Skip(words.Length - Math.Min(words.Length, categoryCount)));

            string formattedMessage = string.Format(layout,
                                                    string.Concat(Enumerable.Repeat(indent, indentLevel)), category, DateTime.Now.ToString(timeFormat), StringResources.GetLine(traceMessageKind), message);

            // Если сообщения совпадают, то инкрементируем счетчик
            if (formattedMessage == lastMessage && traceMessageKind == lastMessageKind)
            {
                messageCount++;
                return;
            }

            // Если счетчик не нулевой, то дописываем к предыдущему сообщению количество и выводим новое сообщение
            if (messageCount > 1)
            {
                if (type == WriterType.Console)
                {
                    SetForegroundColor(lastMessageKind);
                }

                sw.Write(string.Format(" ({0})", messageCount));
                Console.ResetColor();

                messageCount = 1;
            }

            lastMessage     = formattedMessage;
            lastMessageKind = traceMessageKind;

            if (type == WriterType.Console)
            {
                SetForegroundColor(traceMessageKind);
            }

            sw.Write(formattedMessage);

            Console.ResetColor();
        }
Beispiel #3
0
        /// <summary>
        /// Запись сообщения в лог
        /// </summary>
        private static void WriteToTrace(string message, TraceMessageKind traceMessageKind, string category)
        {
            // Если уровень логирование недопустимый, то пропускаем запись
            if (!levels.Contains(TraceMessageKind.All) && !levels.Contains(traceMessageKind))
            {
                return;
            }

            foreach (Writer writer in writers)
            {
                writer.Write(message, traceMessageKind, category);
            }

            WriteEvent?.Invoke(new WriteEventArgs {
                Message = message, Kind = traceMessageKind
            });
        }
Beispiel #4
0
        /// <summary>
        /// Устанавливает цвет консоли
        /// </summary>
        private void SetForegroundColor(TraceMessageKind traceMessageKind)
        {
            switch (traceMessageKind)
            {
            case TraceMessageKind.CriticalError:
                Console.ForegroundColor = ConsoleColor.DarkRed;
                break;

            case TraceMessageKind.Error:
                Console.ForegroundColor = ConsoleColor.Red;
                break;

            case TraceMessageKind.Information:
                Console.ForegroundColor = ConsoleColor.White;
                break;

            case TraceMessageKind.Warning:
                Console.ForegroundColor = ConsoleColor.Yellow;
                break;
            }
        }
Beispiel #5
0
 /// <summary>
 /// Запись сообщения в лог
 /// </summary>
 public static void WriteToTrace(string message, TraceMessageKind traceMessageKind)
 {
     WriteToTrace(message, traceMessageKind, Assembly.GetCallingAssembly().GetName().Name);
 }