powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Логирование
25 сообщений из 55, страница 1 из 3
Логирование
    #38474820
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть сайт. Хочу отлавливать всякие исключения, чтобы юзеру выдавалась страница типа "Опаньки!.. Но мы уже работаем над этим.", а на сервере писался лог, где бы было и что за юзер, какой метод какого контроллера вызвал и с какими параметрами. И подробные сведения об исключении. И чтобы сохранялось это всё в удобном формате (наверное, XML) - чтобы можно было легко написать просмотрщик таких исключений из лога, чтобы руками не разгребать все эти логи.

Ну так вот, два вопроса:

1. Хорошая ли это идея, отлавливать ошибки таким методом? Я, конечно, потыкаю интерфейс и даже, наверное, кое-где юнит-тесты напишу. Но всё же?

2. С помощью чего можно это сделать? Нашёл вот что - оно решит мою задачу? Там в принципе написано, как логировать все обращения юзеров к сайту и вообще все исключения?
...
Рейтинг: 0 / 0
Логирование
    #38474843
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините, опять не в тот раздел. Надо бы в ASP.NET перенсти. Перенесите, пожалуйста.

Добавлю, что хостинг на IIS, сайт - на ASP.NET MVC.
...
Рейтинг: 0 / 0
Логирование
    #38474844
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
1. "Опаньки" можно сделать стандартными методами, подменяя стандартные сообщения веб-сервера. Ничего нового.
2. С помощью перехвата ошибок (try...catch) и их логирования
...
Рейтинг: 0 / 0
Логирование
    #38474853
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 рекомендуют - он мне поможет?
...
Рейтинг: 0 / 0
Логирование
    #38474854
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,
авторОпаньки!.. Но мы уже работаем над этим.
ОООоооо, вам солнцеликий угол заказал..

Код: c#
1.
2.
3.
4.
5.
   protected void Application_Error() {
   Exception lastException = Server.GetLastError();
   NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
   logger.Fatal(lastException);
}


NLog через nuget оформить
...
Рейтинг: 0 / 0
Логирование
    #38474858
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиuser7320,
авторОпаньки!.. Но мы уже работаем над этим.
ОООоооо, вам солнцеликий угол заказал..

Код: c#
1.
2.
3.
4.
5.
   protected void Application_Error() {
   Exception lastException = Server.GetLastError();
   NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
   logger.Fatal(lastException);
}


NLog через nuget оформить
А что лучше - NLog или это ?
...
Рейтинг: 0 / 0
Логирование
    #38474870
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,
log4net,nlog , "это" че то не осилил читать, да и не вижу смысла, первых двух хватает,
...
Рейтинг: 0 / 0
Логирование
    #38474876
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,
а вот у меня чисто научный и в то же время риторический вопрос, Вы когда по этой теме в гугле искали, вы что набирали в поисковой строке?
...
Рейтинг: 0 / 0
Логирование
    #38474881
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашёл такие рассуждения - сравнение log4net, Nlog и Enterprice Library. Кто что о них думает?
...
Рейтинг: 0 / 0
Логирование
    #38474884
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Нашёл такие рассуждения - сравнение log4net, Nlog и Enterprice Library. Кто что о них думает?
Но это как-то старО. Вот нашёл поновее https://essentialdiagnostics.codeplex.com/wikipage?title=Comparison
...
Рейтинг: 0 / 0
Логирование
    #38474885
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиuser7320,
а вот у меня чисто научный и в то же время риторический вопрос, Вы когда по этой теме в гугле искали, вы что набирали в поисковой строке?
Я сначала тут поискал. Потом создал тему. Потом полез в Гугл (результат выше). Плохо, да? (((
...
Рейтинг: 0 / 0
Логирование
    #38474891
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,
а у гула вы как спросили, меня не алгоритм поиска интересует, а вопрос к гуглу..
...
Рейтинг: 0 / 0
Логирование
    #38474893
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,
авторЯ сначала тут поискал. Потом создал тему. Потом полез в Гугл (результат выше). Плохо, да? (((
да нет, не плохо, я бы сказал обычно...., ну если добавить, то многие просто тему создают, а потом искать лезут..
...
Рейтинг: 0 / 0
Логирование
    #38474912
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиuser7320,
а у гула вы как спросили, меня не алгоритм поиска интересует, а вопрос к гуглу..
"msdn logging"
Я сразу старался найти общепринятые практики, а не что-то из вида "CodeProjet - My own (and 151st over the world) approach to logging". Всё же, тема явно давно известная и должна иметь "общепринятые" наработки. А МС славится тем, что общепринятые наработки включает в свои фреймворки как готовые решения.
...
Рейтинг: 0 / 0
Логирование
    #38474920
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,
авторА МС славится тем, что общепринятые наработки включает в свои фреймворки как готовые решения.
всем решарпозависимым посвящается
YouTube Video
...
Рейтинг: 0 / 0
Логирование
    #38474942
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиuser7320,
авторА МС славится тем, что общепринятые наработки включает в свои фреймворки как готовые решения.
всем решарпозависимым посвящается
YouTube Video
...
Рейтинг: 0 / 0
Логирование
    #38474962
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиuser7320,
авторА МС славится тем, что общепринятые наработки включает в свои фреймворки как готовые решения.
всем решарпозависимым посвящается
YouTube Video
...
Рейтинг: 0 / 0
Логирование
    #38474982
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,
авторСкорее так
Ну и где там романтически контекст зависимости с ганджубасом, вином и тифани.
Скорее быдлячий передоз с солями не более, с внезапными испражнениями на одежду
...
Рейтинг: 0 / 0
Логирование
    #38474999
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,

Ну а как вам вообще идея ловить ошибки через логирование эксепшенов?
...
Рейтинг: 0 / 0
Логирование
    #38475003
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,
да ни как, нравится ловите, мне off хватает, может на суперсложных проектах и востребовано или в каких срм где можно свои модули подключать ( типа моджекпортал), но такие не приходилось делать.
логер для орм то же включен в режиме отладки только, ну в целях офп ( общефизического развития) Вам рекомендую, аз вы его нигде до селе не применяли..
...
Рейтинг: 0 / 0
Логирование
    #38475007
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,авторгде бы было и что за юзер, какой метод какого контроллера вызвал и с какими параметрами
ну а это уже первые звоночки паронои, потом вы создадите маленький освенцым и будете банить за каждый непральный
шаг, потом будете собирать статистику по каждому пользователю плавно переходящую в совокупные личные данные, полученные
рассыльными листами - опросниками, а потом..... потом ваш сайт взломают и вывесят на главной кучу г.... (((( ( меланхолично так)
...
Рейтинг: 0 / 0
Логирование
    #38475121
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиuser7320,авторгде бы было и что за юзер, какой метод какого контроллера вызвал и с какими параметрами
ну а это уже первые звоночки паронои, потом вы создадите маленький освенцым и будете банить за каждый непральный
шаг, потом будете собирать статистику по каждому пользователю плавно переходящую в совокупные личные данные, полученные
рассыльными листами - опросниками, а потом..... потом ваш сайт взломают и вывесят на главной кучу г.... (((( ( меланхолично так)
Смешно. Я что хочу, то и собираю НА СВОЁМ сервере. А дальше уже проблемы юзеров, чего они мне будут давать. "Что за юзер" - я имел ввиду как минимум его айдишник в моей БД. Вообще, по-моему, стандартная ситуацию, когда надо отследить ошибку - юзер, контроллер, метод, параметры, подробная инфа об эксепшене. А юзеру - заглушку "всё хорошо, а будет ещё лучше".

Где-то в степиuser7320,
да ни как, нравится ловите, мне off хватает
Что такое "off"?
...
Рейтинг: 0 / 0
Логирование
    #38495827
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиuser7320,
авторОпаньки!.. Но мы уже работаем над этим.
ОООоооо, вам солнцеликий угол заказал..

Код: c#
1.
2.
3.
4.
5.
   protected void Application_Error() {
   Exception lastException = Server.GetLastError();
   NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();
   logger.Fatal(lastException);
}


NLog через nuget оформить
У меня возник ряд вопросов.

Я подключил NLog - всё работает. Но. Вот тут советуют логировать исключения, отлавливая их именно в том месте, где произошло исключение. А можно сделать так, чтобы все исключения можно было отлавливать в одном месте? Более того, в этом месте я хочу, чтобы была доступна информация о текущем пользователе (короче, HttpContext для текущего запроса), запрошенном конроллере, методе и его параметрах. Чтобы это всё я мог записать в лог. Как это сделать?

И ещё. Я поставил точку останова в методе Application_Error. Оказывается, сначала генерируются исключения в коде контроллеров, и только последним делом выполнение доходит до метода Application_Error. Т. е. в этом методе я хоть и могу отлавливать все исключения, но надо как-то обрабатывать и исключения в коде контроллеров - т. е. опять по месту возникновения исключений чего-то писать. Ну и оказывается, что HttpContext не доступен в методе Application_Error. Так что похоже, что этот метод не лучшее место для отлавливания всех исключений сайта.

Так где же лучшее место для отлавливания всех исключений сайта и как это лучше организовать?
...
Рейтинг: 0 / 0
Логирование
    #38495882
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.
    /// <summary>
    /// Атрибут для логирования действий контроллеров
    /// </summary>
    public class LogAttribute: ActionFilterAttribute
    {
        public LogLevel Level { get; set; }
        public String Name { get; set; }

        public LogAttribute()
        {
            Level = LogLevel.All;
        }

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            if (String.IsNullOrEmpty(Name))
                Name = String.Format("{0}.{1}", filterContext.ActionDescriptor.ControllerDescriptor.ControllerType.FullName, filterContext.ActionDescriptor.ActionName);

            var logger = LogManager.GetLogger(Name);

            if (logger is NoOpLogger)
                throw new KeyNotFoundException(String.Format("Не найден логгер для указанного источника '{0}'", Name));

            Action<FormatMessageHandler> action = handler => handler(
                "Пользователь: {0}, Источник: {1}, Метод: {2}, Аргументы: {3}", 
                filterContext.RequestContext.HttpContext.User.Identity.Name,
                filterContext.ActionDescriptor.ControllerDescriptor.ControllerType.FullName,
                filterContext.ActionDescriptor.ActionName,
                String.Join(", ", filterContext.ActionParameters.Select(kv => String.Format("{0}='{1}'", kv.Key, kv.Value))));

            switch (Level)
            {
                case LogLevel.All:
                case LogLevel.Trace:
                    logger.Trace(action);
                    break;
                case LogLevel.Debug:
                    logger.Debug(action);
                    break;
                case LogLevel.Info:
                    logger.Info(action);
                    break;
                case LogLevel.Warn:
                    logger.Warn(action);
                    break;
                case LogLevel.Error:
                    logger.Error(action);
                    break;
                case LogLevel.Fatal:
                    logger.Fatal(action);
                    break;
                case LogLevel.Off:
                    break;
                default:
                    throw new ArgumentOutOfRangeException("Неизвестный науке зверь...");
            }

            base.OnActionExecuting(filterContext);
        }
    }

...
Рейтинг: 0 / 0
Логирование
    #38496926
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я с этим NLog чего-то не понял с уровнями логирования . Какой уровень ни выбираю в Logger, всё одно выводит - то, что я ему в качестве параметра дал. Получается, что это Я САМ определяю, какая инфа на каком уровне логирования выводиться будет. А я думал, он сам собирает мне инфу, соответствующую уровню логирования, который я вызвал. Получается, что если не заморачиваться с уровнями, а надо просто вывести какую-нибудь информацию о том же исключении, то можно функцию логирования вызвать любую (Logger.Info там или Logger.Trace)? Так?
...
Рейтинг: 0 / 0
25 сообщений из 55, страница 1 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Логирование
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]