Существует ли способ инициировать stacktrace каждый раз, когда конкретный регистратор используется?

Я в настоящее время пытаюсь разыскать источник некоторой ленивой загрузки, призывает, в спящем режиме, и самый легкий способ сделать так состоял бы в том, чтобы включить, в спящем режиме вход SQL каждый раз, когда ленивая загрузка собирается произойти и затем идеально инициировать вывод отслеживания стека каждый раз, когда регистратор используется. Прямо сейчас я использую, в спящем режиме 3.5.2, который использует SLF4j и использующий Log4j в качестве моей реализации входа.

Я предполагаю, что мог использовать AOP для окружения каждого вызова входа и проверки, если это - вызов к регистратору SQL, но это кажется довольно жестоким, и я хотел знать, был ли более простой подход, который я пропускал, прежде чем я шел по той дороге.

6
задан Jherico 1 July 2010 в 23:02
поделиться

2 ответа

Вы можете расширить одно из приложений log4j, а затем использовать его в своем log4j.xml.

public class StackPrintingFileAppender extends FileAppender {
    protected void subAppend(LoggingEvent event) {
        new Exception().printStackTrace(new PrintWriter(qw));
        super.subAppend();
    }
}

, а затем в log4j.xml:

<appender name="logger" class="StackPrintingFileAppender">
    ...
</appender>
5
ответ дан 17 December 2019 в 04:41
поделиться

Вы можете написать свой собственный мост SLF4j и поместить его в путь к классам вместо пути Log4j. Затем вы можете делегировать Log4j, но перехватывать вызовы по своему усмотрению, без AOP. Кажется, что его проще инструментировать, и он не страдает от каких-либо дополнительных проблем помимо АОП с точки зрения определения правильного регистратора и когда происходит отложенная загрузка.

0
ответ дан 17 December 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: