Можно ли сделать следующее с помощью ELMAH?
logger.Log(" something");
Я делаю что-то вроде этого:
try
{
// Code that might throw an exception
}
catch(Exception ex)
{
// I need to log error here...
}
Это исключение не будет автоматически зарегистрировано ELMAH, потому что оно было обработано.
Ответы:
Метод прямой записи журнала, работающий с ELMAH 1.0:
ELMAH 1.2 представляет более гибкий API:
Существует разница между двумя решениями:
Raise
Метод применяет правила фильтрации ELMAH к исключению.Log
метод не.Raise
основан на подписке и может регистрировать одно исключение в нескольких регистраторах.источник
Elmah.ErrorLog.Log()
: оно выдает в случае сбоя самого вызова журнала, что может привести к выходу из строя всего веб-приложения.Raise()
молчит Например: если на стороне сервера возникла проблема с неправильной настройкой (например, Elmah настроен на сохранение ошибок на диск, но не имеет правильного доступа к папке журналов),.Log()
метод будет выброшен. (Хотя это хорошо для отладки, например, почему ничего не.Raise()
регистрируется?)Я бы порекомендовал обернуть звонок в Elmah в свой собственный простой класс-обертку.
Тогда просто звоните, когда вам нужно записать ошибку.
Это имеет следующие преимущества:
Примечание. Я добавил свойство contextualMessage для контекстной информации. Вы можете опустить это, если хотите, но я нахожу это очень полезным. Elmah автоматически разворачивает исключения, поэтому основное исключение все равно будет отображаться в журнале, но contextualMessage будет виден, когда вы щелкнете по нему.
источник
// uh oh! just keep going
. Если моя обработка ошибок терпит неудачу, я хочу знать. Я хочу, чтобы это шуметь.Вы можете использовать метод Elmah.ErrorSignal (), чтобы зарегистрировать проблему, не вызывая исключения.
источник
источник
Да, это возможно. ELMAH был разработан для перехвата необработанных исключений. Однако вы можете сообщить об исключении в ELMAH через класс ErrorSignal. Эти исключения не генерируются (не всплывают), а отправляются только в ELMAH (и подписчикам события Raise класса ErrorSignal).
Небольшой пример:
источник
Я пытался сделать то же самое в потоке, который я начал помещать в очередь почты из моего приложения MVC4, так как у меня не было HttpContext, доступного при возникновении исключения. Чтобы сделать это, я получил следующее основанное на этом вопросе и другой ответ, найденный здесь: elmah: исключения без HttpContext?
В конфигурационном файле я указал имя приложения:
Затем в коде (как ответ, приведенный выше, но без HttpContext) вы можете передать значение null вместо HttpContext:
источник
packages.config
выглядишь? Вы видите что - то вроде:<package id="elmah" version="1.2.2" targetFramework="net45" />
<package id="elmah.corelibrary" version="1.2.2" targetFramework="net45" />
<package id="elmah.sqlserver" version="1.2" targetFramework="net45" />'
? Вы устанавливали с NuGET?packages.config
Иногда
CurrentHttpContext
может быть недоступно.определять
использование
источник
Я использую ядро ASP.NET и использую ElmahCore .
Чтобы вручную регистрировать ошибки с помощью HttpContext (в контроллере), просто напишите:
В другой части вашего приложения без HttpContext :
источник
Я пытался записать пользовательские сообщения в журналы elmah, используя Signal.FromCurrentContext (). Raise (ex); и обнаружил, что эти исключения всплывают, например:
Кроме того, я не понимаю, как elmah поддерживает разные уровни ведения журнала - возможно ли отключить подробное ведение журнала настройкой web.config?
источник
Использовал эту строчку и она отлично работает.
источник