Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Вы не должны заполняться .Message
с отладочной информацией, а скорее с краткой, полезной частью текста.
http://msdn.microsoft.com/en-us/library/system.exception.message.aspx
Текст сообщения должен полностью описать ошибку и, если это возможно, должен объяснить, как исправить его. Значение Свойства сообщения включено в информацию, возвращенную ToString.
Свойство сообщения установлено только при создании Исключения. Если никакое сообщение не было предоставлено конструктору для текущего экземпляра, система предоставляет сообщение по умолчанию, которое отформатировано с помощью культуры существующей системы.
[..]
Примечания наследникам:
Свойство сообщения переопределяется в классах, которые требуют управления содержимым сообщения или форматом. Код приложения обычно получает доступ к этому свойству, когда это должно отобразить информацию об исключении, которое было поймано.
Сообщение об ошибке должно быть локализовано.
Данные ответа не квалифицируют как описание.
Не будучи знакомым с elmah, я не могу сказать Вам, как расшириться Exception
класс при использовании его. Делает реализацию elmah его собственный подкласс к Exception
? Или интерфейс? Можно ли разделить его на подклассы сами?
Класс исключений содержит словарь (названный Данными, я полагаю), что можно использовать для соединения пользовательских данных за ванильным исключением.
В пользовательских исключениях, таких как этот, что дополнительные данные ответа должны войти в исключение "сообщение"?
Нет, как Sören уже указал. Однако Ваш тип исключительной ситуации мог переопределить ToString
и разумно добавьте информацию о данных ответа там. Это - совершенно нормальная практика, следовавшая многими типами исключительной ситуации в BCL (Библиотека базовых классов), таким образом, Вы не будете плавать против потока. Например, взгляните на Систему. IO.FileNotFoundException. Реализация ToString в SSCLI (Ротор):
public override String ToString()
{
String s = GetType().FullName + ": " + Message;
if (_fileName != null && _fileName.Length != 0)
s += Environment.NewLine + String.Format(Environment.GetResourceString("IO.FileName_Name"), _fileName);
if (InnerException != null)
s = s + " ---> " + InnerException.ToString();
if (StackTrace != null)
s += Environment.NewLine + StackTrace;
try
{
if(FusionLog!=null)
{
if (s==null)
s=" ";
s+=Environment.NewLine;
s+=Environment.NewLine;
s+="Fusion log follows: ";
s+=Environment.NewLine;
s+=FusionLog;
}
}
catch(SecurityException)
{
}
return s;
}
Как Вы видите, это добавляет содержание свойства FusionLog, которые представляют дополнительную информацию в случае отказов загрузки блока.
Как я могу заставить Elmah записывать дополнительную информацию от поля в пользовательском исключении
ELMAH хранит результат вызова ToString
на исключении как детали ошибки поэтому, если Вы имеете ToString
реализованный, как предписано, информация зарегистрировать без дальнейшей работы. Единственная проблема - то, что зарегистрированная деталь будет неструктурированным текстом.
Я не полностью понимаю вопроса, но Вы, кажется, спрашиваете, что сделать с дополнительными данными исключения, если это не Ваш вопрос, не стесняются игнорировать это.
Я думаю, что важный вопрос спросить - то, что точно сообщение об исключении для? Это не для знания, куда исключение прибыло из, отслеживание стека для этого; это не должно инкапсулировать исключение в более общем, которое должно быть сделано с полем InnerException; в случае, где Ваше исключение только повышено от конкретного места в Вашем коде, это даже не для описания, какую ошибку Вы имели - это - то, для чего тип исключения.
Обычно я использую поле сообщения для обеспечения простых, человекочитаемых подсказок, которые программист, который не является я, видя эту ошибку впервые, может использовать для получения понимания базовой системы. Я полагаю, что поле сообщения подходит для короткого (одно предложение) объяснение, подсказка относительно того, как эта ошибка часто повышается, или ссылка на дополнительные материалы для чтения.
Так, насколько я понимаю Ваш вопрос, я думаю, что лучший способ сохранить эту 'дополнительную информацию', которая получена от другой системы, как InnerException. Я не знаю Elmah, но если это будет достойно, то это проверит на InnerExceptions и сохранит их.
Elmah является http модулем, который записывает необработанные исключения.
Я предполагаю, что это - просто ограничение Elmah, так как это не хранит пользовательские поля. Я предполагаю, что должен буду спросить тех парней. У меня есть дополнительное поле там для данных ответа, но Elmah не хранит его.
Я не понимаю вопроса - Вы расширяете Систему. Исключение, и Вы уже добавили поле Elmah. Это - то, где это принадлежит - как общественная собственность самого исключения.