Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Last active January 15, 2026 22:12
Show Gist options
  • Select an option

  • Save sunmeat/f0a2312f1fb3fbc30a5a8d5a20037bb4 to your computer and use it in GitHub Desktop.

Select an option

Save sunmeat/f0a2312f1fb3fbc30a5a8d5a20037bb4 to your computer and use it in GitHub Desktop.
singleton logger C# example
using System.Text;
namespace SingletonLoggerExample
{
public class Logger
{
private static readonly Lazy<Logger> instance = new(() => new Logger());
// сучасний безпечний для потоків singleton за допомогою lazy<t>
private int logCount = 0; // скільки разів відбувався запис рядка у файл
private Logger() // приватний конструктор (забороняє створювати об'єкти поза класом)
{
}
public static Logger? Instance => instance.Value; // публічний статичний геттер для отримання єдиного об'єкта
public void Write(string message) // записати у журнал рядок тексту
{
logCount++;
Console.WriteLine($"Запис {logCount}: {message}");
// запис рядка у файл
using (StreamWriter outputFile = new StreamWriter("log.txt", true, Encoding.UTF8))
{
outputFile.WriteLine(message);
}
}
public void Write(int value)
{
Write(value.ToString());
}
}
public class HardProcessor
{
private int start;
public HardProcessor(int start)
{
this.start = start;
Logger.Instance.Write("Обчислювач створено."); // логування початку роботи
}
public int ProcessTo(int end)
{
int sum = 0;
for (int i = start; i <= end; i++)
{
sum += i;
Logger.Instance.Write("У процесі...");
Logger.Instance.Write(i);
}
Logger.Instance.Write("Обчислювач щойно обчислив значення: ");
Logger.Instance.Write(sum);
return sum;
}
}
public class Program
{
public static void DoHardWork()
{
var logger = Logger.Instance;
var processor = new HardProcessor(1); // початок діапазону
logger?.Write("Важка робота розпочата..."); // перший запис у журнал
processor.ProcessTo(5); // кінець діапазону
logger?.Write("Важка робота завершена!"); // останній запис у журнал
}
static void Main()
{
Console.OutputEncoding = Encoding.UTF8;
DoHardWork(); // виклик статичного методу (об'єкт тут не потрібен)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment