У меня есть код, который регистрируется Exception.Message
. Однако я прочитал статью, в которой говорится, что лучше использовать Exception.ToString()
. С последним Вы сохраняете более важную информацию об ошибке.
Это верное, и это безопасный идти вперед и заменить весь вход кода Exception.Message
?
Я также использую базирующееся расположение XML для log4net. Действительно ли это возможно это Exception.ToString()
может содержать недопустимые символы XML, которые могут вызвать проблемы?
Exception.message
содержит только сообщение (doh), связанное с исключением. Пример:
Ссылка на объект не установлена на экземпляр объекта
. Метод Exception.toString ()
даст гораздо более многолетний выход, содержащий тип исключения, сообщение (от ранее). , след стека и все эти вещи снова для вложенных / внутренних исключений. Точнее, метод возвращает следующее:
TOSTRING возвращает представление текущего исключения, который предназначен для понимания людей. Если исключение содержит конфиденциальные данные, чувствительные к культуре, строковое представление, возвращенное TOSTRING, необходимо учитывать текущую культуру системы. Хотя нет точных требований к формату возвращаемой строки, она должна попытаться отразить значение объекта, как воспринимается пользователем.
Реализация TOSTRING по умолчанию получает имя класса, который бросил текущее исключение, сообщение, результат вызова TOSTRING на внутреннем исключении и результатом вызовов среды .stacktrace. Если какой-либо из этих членов является нулевой ссылкой (ничего в Visual Basic), его значение не включено в возвращенную строку.
Если нет сообщения об ошибке или если это пустая строка («»), то сообщение об ошибке возвращается. Название внутреннего исключения и трассировки стека возвращаются только в том случае, если они не являются нулевой ссылкой (ничего в Visual Basic).
Я думаю, вы могли бы сделать свой собственный метод, чтобы создать этот дисплей, так как это зависит от того, является или нет это целое число.
public static class Extensions
{
public static string ToCustomString(this decimal d)
{
int i = (int)d;
if (i == d)
return i.ToString();
return d.ToString("#.00");
}
}
-121--3677739- Если вы хотите использовать его для отображения валюты, вы можете использовать следующий
float fVal = 1234.20f;
String strVal = fVal.Tostring("c");
-121--3677740- Я бы сказал, что @ Wim прав. Для просмотра файлов журнала следует использовать ToString ()
- при условии наличия технической аудитории - и Message
, если это вообще необходимо. Можно утверждать, что даже это не подходит для пользователя, для каждого типа исключения и возникновения там (подумайте об ArgumentExceptions и т.д.).
Кроме StackTrace, ToString ()
будет содержать информацию, которую вы не получите иначе. Например, выходные данные слияния, если включено для включения сообщений журнала в «сообщения об исключении».
Некоторые типы исключений даже включают дополнительную информацию (например, из пользовательских свойств) в ToString ()
, но не в сообщении.
Что касается XML-формата для log4net, то вам не нужно беспокоиться о функции ex.ToString() для журналов. Просто передайте сам объект исключения, а в остальном log4net предоставит вам все подробности в предварительно настроенном XML-формате. Единственное, с чем я иногда сталкиваюсь - это новое форматирование строк, но именно тогда я читаю файлы raw. В противном случае анализ XML работает отлично.
В дополнение к тому, что уже говорилось, не используют TOSTRING ()
на объекте исключения для отображения пользователю. Сообщение сообщение
должности .
С точки зрения целей лесозаготовок, определенно используйте TOSTRING ()
, на исключение, не только в сообщение
, что и в большинстве сценариев, вы будете оставлены царапающими голову, где конкретно Это исключение произошло, и какой стек вызова был. Stacktrace сказал бы вам все это.
Ну, я бы сказал, что это зависит от того, что ты хочешь увидеть в журналах, не так ли? Если тебя устраивает то, что предоставляет бывшая, используй это. Иначе используйте ex.toString() или даже регистрируйте трассу стека.
зависит от необходимой вами информации. Для отладки стека трассировки и внутреннее исключение полезно:
string message =
"Exception type " + ex.GetType() + Environment.NewLine +
"Exception message: " + ex.Message + Environment.NewLine +
"Stack trace: " + ex.StackTrace + Environment.NewLine;
if (ex.InnerException != null)
{
message += "---BEGIN InnerException--- " + Environment.NewLine +
"Exception type " + ex.InnerException.GetType() + Environment.NewLine +
"Exception message: " + ex.InnerException.Message + Environment.NewLine +
"Stack trace: " + ex.InnerException.StackTrace + Environment.NewLine +
"---END Inner Exception";
}