Я был в подобной ситуации, когда остановка приложение в отладчике срабатывает таймаут на нижних уровнях, и добавление приборов раздражает из-за перезагрузки.
Для меня решение заключалось в том, чтобы добавить дополнительные заявления о регистрации. Я использовал slf4j API, с реализацией логина, у меня есть enabled JMX on JVM и использовал его для enable/disable logging при необходимости и/или сменил классы, которые были зарегистрированы. Если вы используете slf4j/logback the right way, для отключенного оператора журнала очень мало накладных расходов, поэтому я смог использовать их в свободном доступе.
Таким образом, я могу включить «отладочную аппаратуру», без раздражающих пользователей с перезагрузкой.
Теперь некоторый код:
Это обкатки для эксперимента
package pl.gov.mofnet.giif.logondemand;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogOnDemand {
private static final Logger log = LoggerFactory.getLogger(LogOnDemand.class);
public static void main(String []args) throws InterruptedException {
for (int i = 0; i < 1000; i++) {
log.debug("i: {}", i);
Thread.sleep(1000);
}
}
}
необходимо поместить в пакет по умолчанию Этот файл (или где-нибудь по пути к классам).
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<jmxConfigurator />
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%date [%thread] %-5level %logger{25} - %msg%n</Pattern>
</layout>
</appender>
<root level="info">
<appender-ref ref="console" />
</root>
</configuration>
Этот код имеет компиляции зависимостей времени на org.slf4j: SLF4J-апи: 1.7.7 и выполнения зависимость от ch.qos.logback: Logback-классика: 1.1.2
Выполнить этот код, в Java 7 вам не нужно явно включать JMX, если вы подключаетесь к JMX с одного компьютера. Вы увидите, что на консольном сохранении нет выхода для первоначальных сообщений конфигурации журнала.
Start JConsole, подключиться к этому процессу, на вкладке MBeans вы найдете ch.qos.logback.classic
узел, глубоко под ней есть operations
.
Изменить параметры на setLoggerLevel
, установить p1 в пакетное имя вашего класса, в данном случае pl.gov.mofnet.giif
и p2 - debug
.Нажмите кнопку setLoggerLevel, чтобы запустить эту операцию, вы должны увидеть сообщения журнала на консоли. Чтобы отключить ведение журнала, выполните сброс регистратора до info
или выше.
Какие функции вам нужны в «нетрадиционном отладчике»? Я не могу себе представить, что он полезен без привязки к запущенной JVM (это уже «не вариант по ряду причин»?) – Thilo
Какова целевая система (некоторые из них имеют такие инструменты, как DTrace)? – Thilo