module Feature
def action
puts "Feature"
end
end
class Base
include Feature
end
После include Feature
вам остается только переопределить методы экземпляра Feature
, которые должны быть изменены, в том месте кода, где это необходимо.
Feature.define_method(:action) { "Patch" }
# other methods follow
Base.new.action
#=> "Patch"
Я обнаружил, что самый простой способ регистрации исключений в C# - вызвать метод ToString()
:
try
{
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
Это обычно дает всю необходимую информацию, такую как сообщение об ошибке и трассировку стека, плюс дополнительную контекстную информацию, специфичную для исключения. (однако обратите внимание, что трассировка стека покажет вам только исходные файлы и номера строк, если ваше приложение скомпилировано с отладочной информацией)
Стоит отметить, что просмотр полной трассировки стека может быть довольно неприятным для пользователя, поэтому по возможности старайтесь обрабатывать исключения и выводить более дружелюбное сообщение об ошибке.
Еще одно замечание - вам следует заменить ваш метод WriteLogError
на полнофункциональный фреймворк логирования (например, Serilog) вместо того, чтобы пытаться написать свой собственный.
Ваш метод протоколирования не является потокобезопасным (ваш файл журнала, вероятно, будет заканчиваться сообщениями журнала, перемешанными друг с другом) и также определенно не должен вызывать себя, если вы поймали исключение - это будет означать, что любые исключения, возникающие во время протоколирования ошибок, вероятно, вызовут трудно диагностируемое исключение StackOverflow.
Я мог бы предложить, как исправить эти вещи, однако вам будет гораздо лучше просто использовать подходящий фреймворк для протоколирования.
Ваше решение довольно хорошо. Я прошел ту же фазу
и в конечном счете должен был зарегистрировать все больше (она прибудет...):
Предпочтительно в способе, которым я нажал на ссылку файла, где ошибка произошла,
или нажала на ссылку в стеке вызовов и Visual Studio, открытую в соответствующем местоположении.
(Конечно, все необходимо сделать, *.PDB
файлы, где пути от кода IL
к выпущенному источнику в C # хранятся.)
, Таким образом, я наконец начал использовать это решение:
Это существует как пакет Nuget - Desharp.
Это для обоих типов приложения - сеть и рабочий стол.
Видят, что это документация GitHub Desharp . Это имеет много параметров конфигурации.
try {
var myStrangeObj = new { /*... something really mysterious ...*/ };
throw new Exception("Something really baaaaad with my strange object :-)");
} catch (Exception ex) {
// store any rendered object in debug.html or debug.log file
Desharp.Debug.Log(myStrangeObj, Desharp.Level.DEBUG);
// store exception with all inner exceptions and everything else
// you need to know later in exceptions.html or exceptions.log file
Desharp.Debug.Log(ex);
}
Это имеет форматы журнала HTML, каждое исключение в одной строке,
, и от страницы HTML можно открыться в браузере, можно нажать
на файл, связываются и переходят к Visual Studio - это действительно захватывающе!
только необходимо установить этот редактор Desharp новичок .
См. некоторые демонстрации здесь:
Приложения MVC проверить любой из тех repos и зарегистрировать что-то между прочим выше.
тогда Вы видите зарегистрированные результаты в ~/Logs
каталог. Главным образом что-либо настраивается.
Кроме того, когда вы, например, развертываете сборку выпуска своего кода в производственной среде, не забудьте включить файлы .pdb в пакет выпуска. Вам нужен этот файл, чтобы получить номер строки исключенного кода (см. Сколько информации содержат файлы pdb? (C # / .NET) )
Просто запишите ToString()
. Это не только даст вам трассировку стека, но и включит внутренние исключения.