Создание отслеживания стека является относительно медленной операцией. Ваша вызывающая сторона уже знает, в каком классе и методе это находится, таким образом, усилие потрачено впустую. Этот аспект Вашего решения неэффективен.
Даже при использовании статической информации о классе Вы не должны выбирать Регистратор снова для каждого сообщения. От автора из Log4j, Ceki GГјlcГј:
наиболее распространенная ошибка в классах обертки является вызовом метода Logger.getLogger по каждому запросу журнала. Это, как гарантируют, нанесет ущерб производительности Вашего приложения. Действительно!!!
Это - стандартная, эффективная идиома для получения Регистратора, во время инициализации класса:
private static final Logger log = Logger.getLogger(MyClass.class);
Примечание, что это дает Вам отдельный Регистратор для каждого типа в иерархии. Если Вы придумаете метод, который вызывает getClass()
на экземпляр, Вы будете видеть сообщения, зарегистрированные базовым типом, обнаруживающимся под регистратором подтипа. Возможно, это желательно в некоторых случаях, но я нахожу его сбивающим с толку (и я склонен одобрять состав по наследованию так или иначе).
, Очевидно, с помощью динамического типа через getClass()
потребует, чтобы Вы получили регистратор, по крайней мере, однажды на экземпляр, а не однажды в классе как рекомендуемая идиома с помощью статической информации о типе.
GNU Go - отличная программа Go с открытым исходным кодом. Его оценочная функция хорошо документирована и обеспечивает простой способ вывода объяснений для каждого шага, сделанного программой. Вы можете либо заменить функцию оценки с нуля своей собственной, либо поработать с существующей.
Open Go - это инструмент с открытым исходным кодом с кодом для взаимодействия с использованием протокола Go Modem. Я считаю, что это то, что вам нужно для второй части вашего вопроса.