#c# #.net #winforms #error-handling #error-logging
#c# #.net #winforms #обработка ошибок #ошибка протоколирования
Вопрос:
У меня есть сетевое приложение Windows forms, которое имеет прерывистое поведение на компьютере, который не является моей машиной разработки. Мне нужно протоколировать некоторые внутренние переменные на разных этапах выполнения, чтобы увидеть, где что-то идет не так. (также я думаю, что неплохо бы регистрировать другое поведение, чтобы, если при тестировании были пропущены ошибки, можно было иметь некоторое представление о том, что происходит в поле) Я нашел некоторые надстройки, которые делают это, но это не только кажется чрезмерным, я думаю, что я хотел бы использовать вместо этого то, что встроено в NET framework. Из того, что я прочитал, это означает использование трассировки?? Все примеры создания файлов журнала с использованием трассировки (которые я могу найти) предназначены для консольных приложений. Есть ли у кого-нибудь в Windows forms пример создания файла журнала и записи состояния переменных во время выполнения в файл журнала? Я нашел пример, который регистрируется в системном журнале, но мне это кажется плохой идеей даже для бета-версии. Если я получаю файл журнала от пользователя, испытывающего трудности, я хочу посмотреть только на свои материалы, а не на все, что есть на этом компьютере, плюс с точки зрения системного администратора я бы не хотел, чтобы приложение загромождало системный журнал в моем представлении, который для операционной системы не место для приложений, чтобы делать дамп.
Ответ №1:
Учитывая, что вы уже заявили, что хотели бы что-то встроенное в фреймворк, это, вероятно, не то, что вы хотели услышать, но я обнаружил, что log4net работает очень хорошо. Я не удивлюсь, если это одна из фреймворков «overkill», на которые вы смотрели. Другим вариантом, который в большей степени санкционирован Microsoft, является корпоративная библиотека Microsoft — вас заинтересует платформа протоколирования. (Информация здесь, ссылка для скачивания здесь.)
Комментарии:
1. Я нашел пример здесь dotnetexpertsforum.com / … это просто открывает файл в каталоге приложения.
2. Я реализовал это следующим образом: пространство имен MY_Logger { public class Logger { public static string ts = DateTime.Now.toString(«ггггММдд-ХХммсс», CultureInfo. InvariantCulture); общедоступная статическая строка appdata_folder = System. Windows. Формы. Приложение. Путь к запуску. toString(); общедоступный статический файл журнала StreamWriter = File. Текст приложения (строка. Формат (@»{0}Sample_Log_{1}.log», appdata_folder, ts)); общедоступный регистратор () { файл журнала. WriteLine («Пользователь успешно вошел в систему»); } } }
3. Я использую его как этот Logger.logfile. WriteLine («Только что получены имена последовательных портов»); Logger.logfile. Строка записи (myPortNames[i — 1]); Logger.файл журнала. Строка записи («После сортировки»); Logger.файл журнала. Строка записи (myPortNames[i — 1]);
4. Это, безусловно, работает. Убедитесь, что ваш код протоколирования не вводит новых исключений. Например, убедитесь, что вы обрабатываете исключения, вызванные отсутствием разрешения на открытие файла и т.д.