Да, иметь конструктор только для этого - плохой дизайн. Статический метод SetPath
, который можно вызывать только один раз (иначе выдает исключение), может показаться лучше. Вы должны указать путь при запуске приложения и т. Д.
Тогда вы можете сделать его либо static class
, либо синглтоном, если это требуется для удовлетворения некоторого интерфейсного сценария.
Далее: вы должны добавить синхронизацию здесь! Это не потокобезопасно. Если два потока попытаются войти в систему одновременно, я ожидаю, что это ужасно рухнет. Это не должно быть сложным; самое простое:
private readonly object syncLock = new object();
public static void Log(string value) {
lock(syncLock) {
//...
}
}
(но учтите, что это может повлечь за собой некоторые затраты на блокировку; это можно улучшить с помощью более сложного кода - см. Ниже)
Существуют существующие библиотеки журналов, которые будут думать о множестве других проблем - разбиение файлов на части, асинхронность (для предотвращения блокировки вашего кода IO), пакетная обработка и т. Д .; почему бы просто не использовать один из них? В частности, в данный момент ваш файл не будет закрыт при выходе из приложения, не будет регулярно сбрасываться и большую часть времени будет держать файл заблокированным. Не хорошо.