|
Логирование
|
|||
---|---|---|---|
#18+
Есть сайт. Хочу отлавливать всякие исключения, чтобы юзеру выдавалась страница типа "Опаньки!.. Но мы уже работаем над этим.", а на сервере писался лог, где бы было и что за юзер, какой метод какого контроллера вызвал и с какими параметрами. И подробные сведения об исключении. И чтобы сохранялось это всё в удобном формате (наверное, XML) - чтобы можно было легко написать просмотрщик таких исключений из лога, чтобы руками не разгребать все эти логи. Ну так вот, два вопроса: 1. Хорошая ли это идея, отлавливать ошибки таким методом? Я, конечно, потыкаю интерфейс и даже, наверное, кое-где юнит-тесты напишу. Но всё же? 2. С помощью чего можно это сделать? Нашёл вот что - оно решит мою задачу? Там в принципе написано, как логировать все обращения юзеров к сайту и вообще все исключения? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 18:49 |
|
Логирование
|
|||
---|---|---|---|
#18+
Извините, опять не в тот раздел. Надо бы в ASP.NET перенсти. Перенесите, пожалуйста. Добавлю, что хостинг на IIS, сайт - на ASP.NET MVC. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 18:57 |
|
Логирование
|
|||
---|---|---|---|
#18+
1. "Опаньки" можно сделать стандартными методами, подменяя стандартные сообщения веб-сервера. Ничего нового. 2. С помощью перехвата ошибок (try...catch) и их логирования ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 18:57 |
|
Логирование
|
|||
---|---|---|---|
#18+
Cat21. "Опаньки" можно сделать стандартными методами, подменяя стандартные сообщения веб-сервера. Ничего нового. 2. С помощью перехвата ошибок (try...catch) и их логирования Перехват трай-кетчем - это надо весь код в эти трай-кетчи запихать. Получится захламленный код. Хочу, чтобы это было что-то типа включения галочки в настройках проекта сайта - "перехватывать исключения и в нужном формате писать их в лог". Может, у IIS или там ASP.NET MVC есть свои встроенные средства для этого? Поискал тут - http://www.sql.ru/forum/actualsearch.aspx?search=???*&sin=1&bid=-3&a=&ma=0&dt=-1&s=1&so=1 нашлось совсем мало тем, и большая часть - древность. Ещё какой-то Health Monitor рекомендуют - он мне поможет? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 19:04 |
|
Логирование
|
|||
---|---|---|---|
#18+
user7320, авторОпаньки!.. Но мы уже работаем над этим. ОООоооо, вам солнцеликий угол заказал.. Код: c# 1. 2. 3. 4. 5.
NLog через nuget оформить ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 19:05 |
|
Логирование
|
|||
---|---|---|---|
#18+
Где-то в степиuser7320, авторОпаньки!.. Но мы уже работаем над этим. ОООоооо, вам солнцеликий угол заказал.. Код: c# 1. 2. 3. 4. 5.
NLog через nuget оформить А что лучше - NLog или это ? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 19:08 |
|
Логирование
|
|||
---|---|---|---|
#18+
user7320, log4net,nlog , "это" че то не осилил читать, да и не вижу смысла, первых двух хватает, ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 19:14 |
|
Логирование
|
|||
---|---|---|---|
#18+
user7320, а вот у меня чисто научный и в то же время риторический вопрос, Вы когда по этой теме в гугле искали, вы что набирали в поисковой строке? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 19:20 |
|
Логирование
|
|||
---|---|---|---|
#18+
Нашёл такие рассуждения - сравнение log4net, Nlog и Enterprice Library. Кто что о них думает? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 19:23 |
|
Логирование
|
|||
---|---|---|---|
#18+
user7320Нашёл такие рассуждения - сравнение log4net, Nlog и Enterprice Library. Кто что о них думает? Но это как-то старО. Вот нашёл поновее https://essentialdiagnostics.codeplex.com/wikipage?title=Comparison ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 19:26 |
|
Логирование
|
|||
---|---|---|---|
#18+
Где-то в степиuser7320, а вот у меня чисто научный и в то же время риторический вопрос, Вы когда по этой теме в гугле искали, вы что набирали в поисковой строке? Я сначала тут поискал. Потом создал тему. Потом полез в Гугл (результат выше). Плохо, да? ((( ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 19:26 |
|
Логирование
|
|||
---|---|---|---|
#18+
user7320, а у гула вы как спросили, меня не алгоритм поиска интересует, а вопрос к гуглу.. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 19:37 |
|
Логирование
|
|||
---|---|---|---|
#18+
user7320, авторЯ сначала тут поискал. Потом создал тему. Потом полез в Гугл (результат выше). Плохо, да? ((( да нет, не плохо, я бы сказал обычно...., ну если добавить, то многие просто тему создают, а потом искать лезут.. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 19:39 |
|
Логирование
|
|||
---|---|---|---|
#18+
Где-то в степиuser7320, а у гула вы как спросили, меня не алгоритм поиска интересует, а вопрос к гуглу.. "msdn logging" Я сразу старался найти общепринятые практики, а не что-то из вида "CodeProjet - My own (and 151st over the world) approach to logging". Всё же, тема явно давно известная и должна иметь "общепринятые" наработки. А МС славится тем, что общепринятые наработки включает в свои фреймворки как готовые решения. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 19:59 |
|
Логирование
|
|||
---|---|---|---|
#18+
user7320, авторА МС славится тем, что общепринятые наработки включает в свои фреймворки как готовые решения. всем решарпозависимым посвящается ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 20:06 |
|
Логирование
|
|||
---|---|---|---|
#18+
Где-то в степиuser7320, авторА МС славится тем, что общепринятые наработки включает в свои фреймворки как готовые решения. всем решарпозависимым посвящается ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 20:27 |
|
Логирование
|
|||
---|---|---|---|
#18+
Где-то в степиuser7320, авторА МС славится тем, что общепринятые наработки включает в свои фреймворки как готовые решения. всем решарпозависимым посвящается ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 21:00 |
|
Логирование
|
|||
---|---|---|---|
#18+
user7320, авторСкорее так Ну и где там романтически контекст зависимости с ганджубасом, вином и тифани. Скорее быдлячий передоз с солями не более, с внезапными испражнениями на одежду ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 21:28 |
|
Логирование
|
|||
---|---|---|---|
#18+
Где-то в степи, Ну а как вам вообще идея ловить ошибки через логирование эксепшенов? ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 21:51 |
|
Логирование
|
|||
---|---|---|---|
#18+
user7320, да ни как, нравится ловите, мне off хватает, может на суперсложных проектах и востребовано или в каких срм где можно свои модули подключать ( типа моджекпортал), но такие не приходилось делать. логер для орм то же включен в режиме отладки только, ну в целях офп ( общефизического развития) Вам рекомендую, аз вы его нигде до селе не применяли.. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 22:02 |
|
Логирование
|
|||
---|---|---|---|
#18+
user7320,авторгде бы было и что за юзер, какой метод какого контроллера вызвал и с какими параметрами ну а это уже первые звоночки паронои, потом вы создадите маленький освенцым и будете банить за каждый непральный шаг, потом будете собирать статистику по каждому пользователю плавно переходящую в совокупные личные данные, полученные рассыльными листами - опросниками, а потом..... потом ваш сайт взломают и вывесят на главной кучу г.... (((( ( меланхолично так) ... |
|||
:
Нравится:
Не нравится:
|
|||
22.11.2013, 22:11 |
|
Логирование
|
|||
---|---|---|---|
#18+
Где-то в степиuser7320,авторгде бы было и что за юзер, какой метод какого контроллера вызвал и с какими параметрами ну а это уже первые звоночки паронои, потом вы создадите маленький освенцым и будете банить за каждый непральный шаг, потом будете собирать статистику по каждому пользователю плавно переходящую в совокупные личные данные, полученные рассыльными листами - опросниками, а потом..... потом ваш сайт взломают и вывесят на главной кучу г.... (((( ( меланхолично так) Смешно. Я что хочу, то и собираю НА СВОЁМ сервере. А дальше уже проблемы юзеров, чего они мне будут давать. "Что за юзер" - я имел ввиду как минимум его айдишник в моей БД. Вообще, по-моему, стандартная ситуацию, когда надо отследить ошибку - юзер, контроллер, метод, параметры, подробная инфа об эксепшене. А юзеру - заглушку "всё хорошо, а будет ещё лучше". Где-то в степиuser7320, да ни как, нравится ловите, мне off хватает Что такое "off"? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.11.2013, 09:11 |
|
Логирование
|
|||
---|---|---|---|
#18+
Где-то в степиuser7320, авторОпаньки!.. Но мы уже работаем над этим. ОООоооо, вам солнцеликий угол заказал.. Код: c# 1. 2. 3. 4. 5.
NLog через nuget оформить У меня возник ряд вопросов. Я подключил NLog - всё работает. Но. Вот тут советуют логировать исключения, отлавливая их именно в том месте, где произошло исключение. А можно сделать так, чтобы все исключения можно было отлавливать в одном месте? Более того, в этом месте я хочу, чтобы была доступна информация о текущем пользователе (короче, HttpContext для текущего запроса), запрошенном конроллере, методе и его параметрах. Чтобы это всё я мог записать в лог. Как это сделать? И ещё. Я поставил точку останова в методе Application_Error. Оказывается, сначала генерируются исключения в коде контроллеров, и только последним делом выполнение доходит до метода Application_Error. Т. е. в этом методе я хоть и могу отлавливать все исключения, но надо как-то обрабатывать и исключения в коде контроллеров - т. е. опять по месту возникновения исключений чего-то писать. Ну и оказывается, что HttpContext не доступен в методе Application_Error. Так что похоже, что этот метод не лучшее место для отлавливания всех исключений сайта. Так где же лучшее место для отлавливания всех исключений сайта и как это лучше организовать? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2013, 16:22 |
|
Логирование
|
|||
---|---|---|---|
#18+
Не претендую на правильность высказанной мысли. Просто возможно этот кусок кода наведет вас на правильные мысли: Наследник ActionFilterAttribute Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60.
... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2013, 17:01 |
|
Логирование
|
|||
---|---|---|---|
#18+
Я с этим NLog чего-то не понял с уровнями логирования . Какой уровень ни выбираю в Logger, всё одно выводит - то, что я ему в качестве параметра дал. Получается, что это Я САМ определяю, какая инфа на каком уровне логирования выводиться будет. А я думал, он сам собирает мне инфу, соответствующую уровню логирования, который я вызвал. Получается, что если не заморачиваться с уровнями, а надо просто вывести какую-нибудь информацию о том же исключении, то можно функцию логирования вызвать любую (Logger.Info там или Logger.Trace)? Так? ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2013, 13:29 |
|
Логирование
|
|||
---|---|---|---|
#18+
user7320, Да. Именно так. Когда вы пишете Log.Info() - то сообщение будет выведено в лог, если в конфиге для указанного логгера стоит уровень Info и выше. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.12.2013, 13:33 |
|
Логирование
|
|||
---|---|---|---|
#18+
Arm79Не претендую на правильность высказанной мысли. Просто возможно этот кусок кода наведет вас на правильные мысли: Наследник ActionFilterAttribute Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60.
Спасибо за подсказку. Но я так понимаю, что надо будет к каждому контроллеру по такому атрибуту приписывать? Хотя, наверное, можно ограничиться каким-нибудь базовым контроллером. А что вы думаете, если в базовом контроллере переписать метод OnException и поместить весь ваш код (или его аналог - короче, код вытаскивания нужной информации и её логирования) туда? Вроде, OnException как раз для этого подходит? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2013, 12:22 |
|
Логирование
|
|||
---|---|---|---|
#18+
И ещё. Я вот уже несколько раз встречал, что люди как-то не хотят обрабатывать ошибки через атрибуты контроллеров или секцию customErrors в веб.конфиге. Почему? Один даже пишет : "was running into all kinds of problems". Почему-то именно в Application_Error в Global.asax.cs пытаются обрабатывать ошибки. Пока нашёл довольно подробные советы , как и что делать. Хотя, кто-то там в комментах не согласен и тоже неплохую ссылку приводит. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2013, 12:38 |
|
Логирование
|
|||
---|---|---|---|
#18+
Я не спец в ASP.NET, поэтому повторюсь, не стоит мои слова воспринимать как экспертное мнение Тем не менее, у контроллеров есть метод OnException, через который можно получить доступ к ExceptionContext. Почему бы не определить свой контроллер с переопределенным этим методом, а все свои контроллеры наследовать от него? PS Если сделаете, как хотите, не забудьте код выложить, я бы тоже посмотрел... ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2013, 13:56 |
|
Логирование
|
|||
---|---|---|---|
#18+
user7320И ещё. Я вот уже несколько раз встречал, что люди как-то не хотят обрабатывать ошибки через атрибуты контроллеров или секцию customErrors в веб.конфиге. Почему? Один даже пишет : "was running into all kinds of problems". Почему-то именно в Application_Error в Global.asax.cs пытаются обрабатывать ошибки. Пока нашёл довольно подробные советы , как и что делать. Хотя, кто-то там в комментах не согласен и тоже неплохую ссылку приводит. Перечитал всё. Как я понял, что кастомный атрибут, что OnException - всё одно и то же. И работают оба этих варианта в контексте контроллеров и действий. Т. е. ошибки уровня приложения (если я правильно выражаюсь) не отслеживают. Самое лучшее - это и атрибуты (или OnException) для специфических ошибок, и Application_Error - для всего остального. Но это для моего простого сайта это будет логики на четверть моего приложения. Поэтому для быстроты и простоты ограничусь тем, что всё запихну в Application_Error. Тем более, что и оттуда можно легко получить доступ к контексту текущего запроса через this.Context, или HttpContext.Current, или даже ещё варианты есть. Вместо навороченной логики по вытаскиванию имён контроллеров и действий, решил воспользоваться простым Context.Request.Url.AbsoluteUri - сразу всё видно в одной строке, да ещё и параметры запроса видны. Правда, наверное, если это писать в БД или с помощью специальных просмотрщиков логов обрабатывать, то фильтрации по контроллерам-действиям и прочему не будет. Вобщем, подумаю над этим. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2013, 16:36 |
|
Логирование
|
|||
---|---|---|---|
#18+
user7320Context.Request.Url.AbsoluteUri - сразу всё видно в одной строке, да ещё и параметры запроса видны Да? и параметры, передаваемые через POST? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2013, 16:38 |
|
Логирование
|
|||
---|---|---|---|
#18+
авторПеречитал всё. Как я понял, что кастомный атрибут, что OnException - всё одно и то же. Между ними отличия ровно в том же, в чём отличия между атрибутом контроллера и просто кодом в контроллере. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2013, 16:38 |
|
Логирование
|
|||
---|---|---|---|
#18+
Arm79user7320Context.Request.Url.AbsoluteUri - сразу всё видно в одной строке, да ещё и параметры запроса видны Да? и параметры, передаваемые через POST? Не пробовал. Я не умею имитировать POST-запрос. А так у меня все "посты" имеют в параметрах модель - там всякие привязки-развязки работают. При этом ненавязчивая валидация на клиенте через javascript... Как сымитировать POST с ошибкой в моём случае, чтобы вызвать исключение? Тогда я проверю, будут там параметры в AbsoluteUri или нет. Вы там про то, что у меня получится, просили написать. Да я в этом мало разбираюсь, поэтому по-простому просто в Application_Error всё запульну и буду логировать, а юзеру выдавать заглушку "Опаньки..." или что-то в этом роде. А код буду использовать вот что по ссылкам и у вас - он одинаковый. Единственное, что от себя добавлю - это NLog настрою так, как я хотел - т. е. имя юзера, полный адрес с параметрами запроса (таким способом или другим) и трассировку стека вызова функций. Пожалуй, хватит. По мере пользования буду, наверное, добавлять всякие фильтры, чтобы не логировались всякие дурацкие вещи, типа юзер неправильно имя контроллера-действия в адресной строке набрал или не тот айдишник вбил. Это для любителей руками адреса вводить - им-то, может, и всё равно, а у меня логи мусором забиваться будут. Вобщем, сразу так я это логирование не построю - надо опыта поднабраться и по мере пользования настраивать. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2013, 16:50 |
|
Логирование
|
|||
---|---|---|---|
#18+
авторЕдинственное, что от себя добавлю - это NLog настрою так, как я хотел - т. е. имя юзера, полный адрес с параметрами запроса (таким способом или другим) и трассировку стека вызова функций. Ещё только вот это добавлю. )) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2013, 16:55 |
|
Логирование
|
|||
---|---|---|---|
#18+
user7320авторЕдинственное, что от себя добавлю - это NLog настрою так, как я хотел - т. е. имя юзера, полный адрес с параметрами запроса (таким способом или другим) и трассировку стека вызова функций. Ещё только вот это добавлю. )) В смысле, что проход по всем вложенным исключениям и их логирование. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.12.2013, 16:56 |
|
Логирование
|
|||
---|---|---|---|
#18+
Arm79user7320Context.Request.Url.AbsoluteUri - сразу всё видно в одной строке, да ещё и параметры запроса видны Да? и параметры, передаваемые через POST? Так. Кинул исключение ручками на POST-запросе и посмотрел, что залогировалось. Сразу скажу, что ваша строка Код: c# 1.
для меня оказалась непонятна в том смысле, что я не понял, как в Application_Error получить объект ActionExecutingContext (у вас такого типа - параметр filterContext), чтобы вытащить параметры запроса. Но я нашёл другой способ - Request.Unvalidated.Form. Вот так можно получить все параметры формы, включая скрытые, включая всякие __RequestVerificationToken: Код: c# 1. 2. 3. 4.
Приведение Form типа NameValueCollection взял отсюда - http://stackoverflow.com/a/396504/808128 . Я так понимаю, что POST-запросы всегда связаны с формами. Если да, то этот способ можно использовать как универсальный для логирования параметров POST-запросов, как я понимаю. По крайней мере, у меня POST идут только на формах. Если вы знаете, как получить ActionExecutingContext в Application_Error, то буду благодарен - чтобы не маяться с приведением формы и её разложением. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2013, 12:57 |
|
Логирование
|
|||
---|---|---|---|
#18+
Точнее, полностью код выглядит так: Код: c# 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2013, 13:00 |
|
Логирование
|
|||
---|---|---|---|
#18+
Что интересно, перепробовал все поля и подполя в this.Context - нигде не нашёл параметров запроса, кроме как в форме. Даже this.Context.Request.RequestContext.RouteData содержит только имена контроллера и действия. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2013, 13:02 |
|
Логирование
|
|||
---|---|---|---|
#18+
user7320что я не понял, как в Application_Error получить объект ActionExecutingContext Ну так он для действий же. Изначально у меня не стояла задача ловить только ошибки. Нужно было логировать обращения к методам, и все. user7320чтобы не маяться с приведением формы и её разложением. Кажется, раскладкой параметров в модель занимается DefaultModelBinder. Или его наследники (созданные вами). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2013, 13:05 |
|
Логирование
|
|||
---|---|---|---|
#18+
Arm79user7320что я не понял, как в Application_Error получить объект ActionExecutingContext Ну так он для действий же. Изначально у меня не стояла задача ловить только ошибки. Нужно было логировать обращения к методам, и все. user7320чтобы не маяться с приведением формы и её разложением. Кажется, раскладкой параметров в модель занимается DefaultModelBinder. Или его наследники (созданные вами). Про раскладку формы я имел ввиду мой код - вот эта портянка может быть как-нибудь сокращена? Или вы тоже пока не знаете, как попроще получить параметры POST-запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2013, 13:11 |
|
Логирование
|
|||
---|---|---|---|
#18+
user7320Arm79пропущено... Ну так он для действий же. Изначально у меня не стояла задача ловить только ошибки. Нужно было логировать обращения к методам, и все. пропущено... Кажется, раскладкой параметров в модель занимается DefaultModelBinder. Или его наследники (созданные вами). Про раскладку формы я имел ввиду мой код - вот эта портянка может быть как-нибудь сокращена? Или вы тоже пока не знаете, как попроще получить параметры POST-запроса? Именно в Application_Error, я имею ввиду, а не в контроллерах или действиях. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2013, 13:12 |
|
Логирование
|
|||
---|---|---|---|
#18+
user7320, На память не помню, но вроде параметры формы можно получить из свойства Request.Form ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2013, 13:19 |
|
Логирование
|
|||
---|---|---|---|
#18+
Arm79user7320, На память не помню, но вроде параметры формы можно получить из свойства Request.Form Ну, это то же, что и у меня, только до валидации. По идее, надо как раз брать Request.Unvalidated.Form, чем Request.Form, чтобы можно было воспроизвести исключение, т. к. это то, что юзер непосредственно ввёл. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2013, 14:19 |
|
Логирование
|
|||
---|---|---|---|
#18+
Вобщем, намалевал вот что пока: в NLog таргет вот такой простой Код: xml 1. 2. 3. 4. 5. 6.
В Global.asax портянка Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.
Проверил на GET- и POST-запросах - работает. Если нет параметров формы (GET-запрос, например) - то просто пустое место. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2013, 16:45 |
|
Логирование
|
|||
---|---|---|---|
#18+
Вот только думаю, что проблемы с просмотрщиками могут быть. Вроде, чтобы они там удобно показывали, надо все вот эти мои заголовки, типа "_Stack trace" и т. п. в настройки layout для NLog поместить. Вобщем, посмотрю. Главное, я получил, чего хотел. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2013, 16:46 |
|
Логирование
|
|||
---|---|---|---|
#18+
А, вот ещё забыл показать юзеру нормальную заглушку, а не трассировку стека вываливать. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2013, 16:49 |
|
Логирование
|
|||
---|---|---|---|
#18+
Если интересует только логирование ошибок asp.net, то я бы рекомендовал elmah ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2013, 00:31 |
|
Логирование
|
|||
---|---|---|---|
#18+
SeVaЕсли интересует только логирование ошибок asp.net, то я бы рекомендовал elmah Мне нужно все исключения логировать. Пока. Потом я будут фильтровать, какие логировать не стоит. Но, как я понял, штука в том, что на самом деле достаточно самого простого логировщика - буквально, который будет тупо аппендить тестовый файл или в БД записывать. Я имею ввиду, что сами исключения и всю необходимую инфу я собираю сам и превращаю её либо в объект, либо в строку. А от логировщика уже нужно только уметь обращаться с этим объектом или строкой - очень простое требование, правда? Я вот тот же NLog глянул - там логирование, например, в текстовый файл не содержит в себе никакой магии - String.Append на каждом шагу, а потом просто добавляет в файл и всё. Такое и я сам мог бы написать. Единственный плюс - в предустановленных шаблонах записи (типа дат, исключений конкретного типа, назначений записей логов (файл, БД и пр.) и т. п.), которые можно настраивать в файле конфигурации - т. е. без перекомпиляции всего проекта. Т. е. сам бы я такое долго писал, а тут всё готовое. В то же время никакого ноу-хау тут нет - просто освободжают от рутины. Короче, для меня сейчас все эти логировщики на одно лицо - умеют писать в файл или БД и всё - мне этого за глаза хватит пока. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.12.2013, 11:42 |
|
Логирование
|
|||
---|---|---|---|
#18+
Посмотрел примеры работы с Application_Error. Не понял, почему у всех завидное пристрастие к использованию Response.Clear() и Server.ClearError()? Вот примеры: http://stackoverflow.com/a/1171805/808128 http://www.prideparrot.com/blog/archive/2012/5/exception_handling_in_asp_net_mvc#returningviews Некоторые даже целую портянку пишут: Код: c# 1. 2. 3. 4.
Посмотрел в МСДН : авторThe following example sets the ContentType property for the response to image/jpeg, calls the Clear method to remove other content that might be attached to the response, and then sets the BufferOutput property to true so that the complete page will be processed before any content is sent to the requesting client. Т. е. я так понимаю, что если к ответу сервера уже что-то было приложено, какой-то контент, и ошибка возникла после того, как к ответу что-то было приложено, то если стоит задача только сообщить юзеру об ошибке, то нет смысла отправлять ему этот контент? Я правильно понимаю? Теперь по Server.ClearError(). Посмотрел в МСДН и тоже не очень понял. Единственное, как я понял, на что оно может сгодиться - очистить логи сервера от логирования обработанных исключений. Т. е. раз мы его обработали, то и логировать его вроде как не нужно? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2013, 12:17 |
|
Логирование
|
|||
---|---|---|---|
#18+
user7320 Вот те на! Решил . )) Но другая напасть. В лог с таким решением, как у меня, пишется информации об исключениях на языке, соответствующему текущей культуре. А как сделать так, чтобы всегда писалось на английском? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.12.2013, 14:17 |
|
Логирование
|
|||
---|---|---|---|
#18+
Да уж, топик мягко и ненавязчиво перерос в запись блога user7320 Практической пользы, IMHO, для человека имеющего искать и находить решения, почти ноль... User7320, серебряной пули (это то чего Вы собираетесь делать) не бывает. Не изобретайте лисапедов... Ошибки нужно перехватывать и обрабатывать в месте их возникновения. А то может статься так, что в результате вот такого "логирования" может быть потеряна важная информация для пользования, или же к примеру запись информации в базу произойдёт, а ошибка будет в момент генерирования ответа, а у Вас в данном случае ничего кроме "оппаньки" (__о__) пользователю показано не будет... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2013, 18:31 |
|
Логирование
|
|||
---|---|---|---|
#18+
user7320, И прежде чем браться за логирование GET, POST, HEAD и т.д. хорошо бы прочитать спецификацию протокола HTTP... А то собрались логировать GET и POST, а когда они используются и чем отличаются понятия не имеете (это судя по удивлённым постам в этой теме о том, что запрос POST гененируется только формами)... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2013, 18:34 |
|
Логирование
|
|||
---|---|---|---|
#18+
Alex Kuznetsov, это всё понятно. Мне нужно было быстрое решение-затычка на ближайшее время. Я же выше написал, что потом буду добавлять в нужных местах обработку конкретных исключений. Скажите, как вы себе представляете "перехватывать и обрабатывать в месте их возникновения"? Берём любую функцию .NET - каждая может кидать от одного до полудесятка разных исключений. Я так понимаю, что "идеальный код" выглядит так: пять строк бизнес-логики и сто строк обработки исключений вызванных функций, логирования и прочей "обслуги". На это ещё сверху юнит-тестов отсыпать, которые, как известно, по объёму раза в 2 больше кода, который они тестируют. Написали пять строк "по правилам"? Оттестировали? Потратили полдня на всё это? - Можно дальше писать... Понятно, что так никто не пишет. Перехватывают только самые основные исключения. Только штука в том, что я недостаточно опытен, чтобы знать, в каком случае какие будут основные. Плюс у меня нет времени сейчас внести сразу в весь проект обработку исключений по месту - в контроллеры и прочее - т. к. поначалу проект писался почти без обработки исключений. Поэтому я считаю, что нужно как-то реализовать глобальный перехват всех исключений, по крайней мере, на первое время. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.12.2013, 21:20 |
|
Логирование
|
|||
---|---|---|---|
#18+
user7320, Исключения, которые могут возникнуть в контроллерах перехватываются в контроллерах, исключения моделей перехватываются в моделях. А для того чтобы исключений было как можно меньше, нужно соответствующие проверки до выполнения критических вещей делать... user7320...Берём любую функцию .NET - каждая может кидать от одного до полудесятка разных исключений. Я так понимаю, что "идеальный код" выглядит так: пять строк бизнес-логики и сто строк обработки исключений вызванных функций, логирования и прочей "обслуги"... Ну, утрировать-то не нужно. Не всякая функция может до полудесятка исключений "кидать", а лишь действительно критические. Есть одно правило - не доводить дело до исключений. Как? Проверками... (повторяюсь... плохо это...). Кроме того, Ваше утверждение: user7320...Только штука в том, что я недостаточно опытен, чтобы знать, в каком случае какие будут основные...не должно служить оправданием использованию недостаточно грамотного подхода. Потратьте время на изучение поведения критических мест в различных ситуациях и поймёте где, какие исключения и как перехватывать. Соответственно появится опыт... Ну и понимание... В общем - удачи... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.12.2013, 12:46 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1403498]: |
0ms |
get settings: |
12ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
148ms |
get topic data: |
15ms |
get forum data: |
3ms |
get page messages: |
76ms |
get tp. blocked users: |
2ms |
others: | 332ms |
total: | 608ms |
0 / 0 |