Exemplo n.º 1
0
        void ILogPlugin.Log(string source, LogLevel level, object message)
        {
            if (!Settings.Default.Logger.Active)
            {
                return;
            }

            if (message is Exception ex)
            {
                var sb = new StringBuilder();
                GetErrorLogs(sb, ex);
                message = sb.ToString();
            }

            lock (typeof(Logger))
            {
                DateTime now = DateTime.Now;
                var      log = $"[{now.TimeOfDay:hh\\:mm\\:ss\\.fff}] {message}";

                if (Settings.Default.Logger.ConsoleOutput)
                {
                    var currentColor = new ConsoleColorSet();

                    switch (level)
                    {
                    case LogLevel.Debug: DebugColor.Apply(); break;

                    case LogLevel.Error: ErrorColor.Apply(); break;

                    case LogLevel.Fatal: FatalColor.Apply(); break;

                    case LogLevel.Info: InfoColor.Apply(); break;

                    case LogLevel.Warning: WarningColor.Apply(); break;
                    }

                    Console.WriteLine(log);
                    currentColor.Apply();
                }

                if (!string.IsNullOrEmpty(Settings.Default.Logger.Path))
                {
                    StringBuilder sb = new StringBuilder(source);
                    foreach (char c in GetInvalidFileNameChars())
                    {
                        sb.Replace(c, '-');
                    }
                    var path = Combine(Settings.Default.Logger.Path, sb.ToString());
                    Directory.CreateDirectory(path);
                    path = Combine(path, $"{now:yyyy-MM-dd}.log");
                    try
                    {
                        File.AppendAllLines(path, new[] { $"[{level}]{log}" });
                    }
                    catch (IOException)
                    {
                        Console.WriteLine("Error writing the log file: " + path);
                    }
                }
            }
        }