Я реализую приложение с библиотекой Jsch от JCraft, которая является реализацией Java для ssh.
Эта библиотека имеет интерфейс Logger, который описывает функцию журнала следующим образом.
public void log(int level, String message);
Есть ли способ реализовать это с чем-то вроде этого?
public void log(int level, String message)
{
StackTraceElement trace = getTrace();
LOGGER.log( trace, level, message);
}




Вместо того, чтобы передавать трассировку стека, вы можете передать исключение, и структура ведения журнала распечатает трассировку стека. Это возможно с помощью интерфейса SLF4JLogger и фреймворков журналирования, таких как logback, которые ему соответствуют.
Нет обработки исключений. Просто обычные сообщения регистрации
Из текущего потока вы можете запросить всю трассировку стека, и если не учитывать текущую позицию [0], у вас будет место вызова log вхождения.
public void log(int level, String message) {
StackTraceElement trace = Thread.currentThread().getStackTrace()[1]; // Or 2?
LOGGER.log(trace, level, message);
}
Поскольку в настоящее время исключения часто объединяются в цепочку (выбрасываются как причина), я не уверен, достаточно ли одного элемента трассировки стека.
Я знаю механизм StackTraceElement. Я не знаю, как передать информацию о какой-либо структуре ведения журнала, например, о SLF4J, как предложил Raedwald.
Если предполагается, что getTrace() возвращает сайт вызова оператора регистратора, вы можете создать новый Throwable и преобразовать трассировку стека в строку или выбрать один кадр и преобразовать его в строку. Получив строковое представление трассировки, вы можете соединить его со строкой сообщения и отправить в целевую структуру ведения журнала.
Если ваша структура ведения журналов поддерживает Сопоставленный диагностический контекст, вы можете передать объект throwable или сам элемент трассировки стека в структуру ведения журналов. Если вы используете JUL, вам просто нужно использовать метод Logger::logp для передачи информации о месте вызова.
См. также stackoverflow.com/questions/42534564/…