2010-05-17 2 views
3

Я работаю над созданием веб-службы (с использованием C#), и эта веб-служба будет использовать базу данных MS SQL Server. Теперь я пытаюсь создать (журнал журналов исключений) для этой веб-службы. Просто я хочу сохранить каждое исключение в веб-службе для будущего использования (трассировка ошибок).Где хранить исключения веб-сервисов?

Где лучше всего сохранить эти исключения? Это хорошая идея сохранить его в базе данных? Что, если исключение связано с самой базой данных?

+0

Для ASP.Net, как только вы узнаете [Elmah] (http://code.google.com/p/elmah/), вы больше не будете искать что-либо еще. Также работает с Web API с небольшой помощью. –

ответ

6

У вас есть 3 варианта:

  1. Log-файл - хороший вариант, который я предпочитаю использовать, потому что я могу легко иметь дело с записями и смотреть через него. Я даже создаю каталоги для файлов журнала со следующим форматом AppName \ YYYY \ MM \ DD \ yourfile.log, чтобы я мог видеть, как выглядели вещи в определенный день (в некоторых случаях есть годы регистрации). Threading не является проблемой. Вы можете сделать его потокобезопасным. Это довольно безопасный метод, потому что у вас почти всегда будет доступ к записи на диск, если ваш диск не будет заполнен, какой из них можно будет обрабатывать.

  2. База данных - также хорошо, потому что вы можете легко ее запросить. Он имеет большие шансы на отказ и не должен использоваться для первичной регистрации на мой взгляд. Если у вас БД идет, возникают проблемы, которые вызывают исключение, где вы его сохранили? Ваша БД может отставать и получать тайм-ауты и т. Д. Это также может повлиять на производительность вашего БД в зависимости от того, сколько вы регистрируете.

  3. Журнал системных событий - это отлично подходит для 1 или 2 или обоих. Журнал событий будет почти всегда доступен, и это то, что использует Windows (при условии, что на сервере Windows) это очень безопасно. Вы также можете создавать особые исключения для приложения, чтобы вы могли отфильтровать все те статьи, которые вы не хотите беспокоиться. Тем не менее, он хранит только определенную сумму, поэтому ваша история может быть коротким в зависимости от того, сколько ее выбрасывают, чтобы вы могли экспортировать эти данные по расписанию.

Большинство моих приложений использует комбинацию 1 и 2. Мы свернули собственную регистрацию и она работала хорошо для нас, но есть некоторые большие библиотеки там, чтобы помочь с этим. У нас также есть встроенный инструмент для мониторинга наших журналов событий сервера для наших конкретных элементов и, когда это возможно, уведомлять правильных людей на основе определенных критериев. Он настроен как процесс вытягивания с другого сервера, так что даже когда на сервере возникают проблемы, когда, возможно, не удается отправить уведомление, сервер мониторинга должен иметь возможность в конечном итоге получить данные и выполнить правильное уведомление.

Ключ, в зависимости от того, насколько важно регистрировать вас и ваше приложение, является избыточным. Если вы переходите по маршруту DB, у вас есть резервная копия. Если вы идете по файловому маршруту, выполните резервное копирование. В большинстве случаев регистрация может завершиться неудачей в определенных случаях, поэтому важно иметь несколько способов хранения необходимой вам информации. Это сэкономило мне массу времени, выясняя проблемы, когда по каким-то причинам один из методов ведения журнала не прошел.

+0

Спасибо Kelsey, но безопасно ли хранить его в файле журнала? системный журнал событий не является для меня вариантом, потому что веб-служба является хостом на удаленном сервере, и у меня нет доступа к этому серверу. –

+0

Я ценю вашу помощь Келси, мне нравится идея «иметь более одного способа хранения информации», но файл журнала regrad; один вопрос, пожалуйста, могу ли я использовать этот простой оператор (File.AppendAllText (@ "logfilepath", exceptionMessage);) Я имею в виду, что может быть более одного исключения в одном и том же тиме, так что будет храниться в файле журнала? –

+0

@ICoder Это не потокобезопасность. Есть утилиты, которые делают запись журналов в потоковом режиме безопасным. Посмотрите на log4net. Используя простую конфигурацию, вы можете войти в db, веб-службу, журнал событий, файл журнала и т. Д. –

2

Я всегда стараюсь хранить его в файле журнала. Некоторым людям нравится хранить его в db, но мне легче с регулярным выражением и т. Д. Смотреть в текстовый файл.

Как вы сказали, что, если есть проблема с db? Если вы не можете подключиться к нему, вы не сможете зарегистрировать проблему. Лучшим подходом может быть регистрация его в двух разных местах. Попробуйте базу данных (или файл журнала), и если это не сработает, зарегистрируйте ее в средстве просмотра событий.

+0

Действительно ли он безопасен для хранения в файле журнала? –

+1

Если у вас есть класс, который его контролирует, да. Я бы посмотрел Log4net – kemiller2002

Смежные вопросы