Last active
January 15, 2026 22:12
-
-
Save sunmeat/f0a2312f1fb3fbc30a5a8d5a20037bb4 to your computer and use it in GitHub Desktop.
singleton logger C# example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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