Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Created November 24, 2023 13:56
Show Gist options
  • Save sunmeat/861a6f4429da5620de2d07b26b95fbb6 to your computer and use it in GitHub Desktop.
Save sunmeat/861a6f4429da5620de2d07b26b95fbb6 to your computer and use it in GitHub Desktop.
singleton logger C# example
class Logger
{
private static Logger instance; // 1) приватная статическая ссылка на единственный экземпляр класса
private int logCount = 0; // сколько раз происходила запись строки в файл
private Logger() // 2) конструктор - приватный (запрещает создавать объекты за пределами класса)
{
}
public static Logger GetInstance() // 3) публичный статический геттер на получение единственного объекта
{
// если объекта журнала не существует - он создаётся
return instance ?? (instance = new Logger());
}
public void Write(string message) // записать в журнал строку текста
{
logCount++;
Console.WriteLine($"{logCount}: {message}");
// записать строку в файл
using (StreamWriter outputFile = new StreamWriter("log.txt", true))
{
outputFile.WriteLine(message);
}
}
public void Write(int value)
{
Write(value.ToString());
}
}
class HardProcessor
{
private int start;
public HardProcessor(int start)
{
this.start = start;
Logger.GetInstance().Write("Processor has been created."); // логируем начало работы
}
public int ProcessTo(int end)
{
int sum = 0;
for (int i = start; i <= end; i++)
{
sum += i;
Logger.GetInstance().Write("In progress...");
Logger.GetInstance().Write(i);
}
Logger.GetInstance().Write("Processor just calculated value: ");
Logger.GetInstance().Write(sum);
return sum;
}
}
class Program
{
public static void DoHardWork()
{
var logger = Logger.GetInstance();
HardProcessor processor = new HardProcessor(1); // начало диапазона
logger.Write("Hard work started..."); // первая запись в журнал
processor.ProcessTo(5); // конец диапазона
logger.Write("Hard work finished!"); // последняя запись в журнал
}
static void Main()
{
DoHardWork(); // вызов метода (объект здесь не нужен)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment