using System;
using System.Drawing;
using System.IO;
using System.Windows.Forms;
namespace FLCompanionByDvurechensky.Services
{
///
/// Сервис логирования
///
public class LogService
{
///
/// Поле вывода информации интерфейса
///
private RichTextBox Logger { get; set; }
///
/// Время начала логирования
///
private string LogDateTime { get; set; }
///
/// Директория логирования
///
private string DirLog
{
get
{
var path = "Log";
if(!Directory.Exists(path)) Directory.CreateDirectory(path);
else
{
var directoryInfo = new DirectoryInfo(path);
if (directoryInfo.GetFiles().Length > 50)
{
Directory.Delete(path, true); //true - если директория не пуста (удалит и файлы и папки)
Directory.CreateDirectory(path);
}
}
return path;
}
}
///
/// Путь до файла лога
///
private string LogPath => Path.Combine(DirLog, $"{LogDateTime}_log.txt");
///
/// Конструктор
///
/// Объект вывода интерфейса
public LogService(RichTextBox logger)
{
Logger = logger;
LogDateTime = DateTime.Now.ToString("yyyy-dd-M--HH-mm-ss");
}
///
/// Обычное событие
///
/// текст сообщения
public void LogEvent(string message)
{
Logger.BeginInvoke(new Action(() =>
{
Logger.BackColor = Color.LightGray;
Logger.SelectionColor = Color.Black;
var msg = "-----> " + message + Environment.NewLine;
Logger.AppendText(msg);
File.AppendAllText(LogPath, msg);
Logger.SelectionStart = Logger.TextLength;
Logger.ScrollToCaret();
}));
}
///
/// Событие ошибки
///
/// текст ошибки
public void ErrorLogEvent(string message)
{
Logger.BeginInvoke(new Action(() =>
{
Logger.BackColor = Color.LightGray;
Logger.SelectionColor = Color.Red;
var msg = "!~ " + message + Environment.NewLine;
Logger.AppendText(msg);
File.AppendAllText(LogPath, msg);
Logger.SelectionStart = Logger.TextLength;
Logger.ScrollToCaret();
}));
}
///
/// Событие предупреждения
///
/// текст предупреждения
public void ErrorWarningEvent(string message)
{
Logger.BeginInvoke(new Action(() =>
{
Logger.BackColor = Color.LightGray;
Logger.SelectionColor = Color.DarkBlue;
var msg = "#~ " + message + Environment.NewLine;
Logger.AppendText(msg);
File.AppendAllText(LogPath, msg);
Logger.SelectionStart = Logger.TextLength;
Logger.ScrollToCaret();
}));
}
}
}