Использование нескольких меток в Java Application Monitor (JAMon)
Можно ли отслеживать различные этапы обработки, используя один и тот же класс JAMon Monitor? Например, в примере кода я хотел бы измерить время выполнения "Point1" и "Point2". Однако пример возвращает только статистику о втором шаге. Конечно, я могу создать несколько объектов типа Monitor. Но может быть, есть более чистый путь?
Monitor mon = null;
for(int i =0; i < 1000; i++){
//Part1
mon = MonitorFactory.start("Point 1");
Thread.sleep(2);
mon.stop();
//Part2
mon = MonitorFactory.start("Point 2");
mon.stop();
}
System.out.println(mon.toString());
Выход:
JAMon Label = точка 2, единицы измерения = мс.: (LastValue=0,0, Hits=1000,0, Avg=0,001, Total=1,0, Min = 0,0, Max=1,0, Active = 0,0, Avg Active=1,0, Max Active=1,0, Первый доступ = ср 17 июн 10:40:44 CEST 2015, последний доступ = ср 17 июн 10:40:46 CEST 2015)
Желаемый результат:
JAMon Label = Точка 1, Единицы = мс.: (LastValue=0.0, Hits=1000.0, Avg=0.001, Total=1.0, Min=0.0, Max=1.0, Active=0.0, Avg Active=1.0, Max Active=1.0, Первый доступ = ср 17 июн 10:40:44 CEST 2015, последний доступ = ср 17 июн 10:40:46 CEST 2015)
JAMon Label = точка 2, единицы измерения = мс.: (LastValue=0,0, Hits=1000,0, Avg=0,001, Total=1,0, Min = 0,0, Max=1,0, Active = 0,0, Avg Active=1,0, Max Active=1,0, Первый доступ = ср 17 июн 10:40:44 CEST 2015, последний доступ = ср 17 июн 10:40:46 CEST 2015)
2 ответа
Вы можете изменить вызов монитора toString() на явный вызов getMonitor(...).
Monitor mon = null;
for(int i =0; i < 1000; i++){
//Part1
mon = MonitorFactory.start("Point 1");
Thread.sleep(2);
mon.stop();
//Part2
mon = MonitorFactory.start("Point 2");
mon.stop();
}
System.out.println(MonitorFactory.getMonitor("Point 1").toString());
System.out.println(MonitorFactory.getMonitor("Point 2").toString());
Или вы можете создать 2 монитора.
Monitor mon1 = null;
Monitor mon2 = null;
for(int i =0; i < 1000; i++){
//Part1
mon1 = MonitorFactory.start("Point 1");
Thread.sleep(2);
mon1.stop();
//Part2
mon2 = MonitorFactory.start("Point 2");
mon2.stop();
}
System.out.println(mon1.toString());
System.out.println(mon2.toString());
Есть лучший способ, чем другой ответ:
for( Object monitor: MonitorFactory.getMap().values() ){
System.out.println( monitor );
}
Это будет печатать все используемые мониторы до сих пор. Во всех темах. Именно то, что вы хотите.
Вы можете проверить законченный пример кода и вывести здесь.