Skip to content

Commit 4b50472

Browse files
committed
logical value of LogRecord added
1 parent ab380b7 commit 4b50472

File tree

1 file changed

+79
-2
lines changed
  • visualvm/libs.profiler/profiler.heapwalker/src/org/graalvm/visualvm/lib/profiler/heapwalk/details/jdk

1 file changed

+79
-2
lines changed

visualvm/libs.profiler/profiler.heapwalker/src/org/graalvm/visualvm/lib/profiler/heapwalk/details/jdk/UtilDetailsProvider.java

Lines changed: 79 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,24 @@
4242
*/
4343
package org.graalvm.visualvm.lib.profiler.heapwalk.details.jdk;
4444

45+
import java.util.ArrayList;
4546
import java.util.Date;
47+
import java.util.List;
48+
import java.util.logging.Formatter;
49+
import java.util.logging.Level;
50+
import java.util.logging.LogRecord;
51+
import java.util.logging.SimpleFormatter;
4652
import org.graalvm.visualvm.lib.jfluid.heap.Heap;
4753
import org.graalvm.visualvm.lib.jfluid.heap.Instance;
54+
import org.graalvm.visualvm.lib.jfluid.heap.ObjectArrayInstance;
4855
import org.graalvm.visualvm.lib.profiler.heapwalk.details.spi.DetailsProvider;
4956
import org.graalvm.visualvm.lib.profiler.heapwalk.details.spi.DetailsUtils;
5057
import org.openide.util.lookup.ServiceProvider;
5158

5259
/**
5360
*
5461
* @author Jiri Sedlacek
62+
* @author Tomas Hurka
5563
*/
5664
@ServiceProvider(service=DetailsProvider.class)
5765
public final class UtilDetailsProvider extends DetailsProvider.Basic {
@@ -63,11 +71,14 @@ public final class UtilDetailsProvider extends DetailsProvider.Basic {
6371
private static final String TIMEZONE_MASK = "java.util.TimeZone+"; // NOI18N
6472
private static final String PATTERN_MASK = "java.util.regex.Pattern"; // NOI18N
6573
private static final String CURRENCY_MASK = "java.util.Currency"; // NOI18N
66-
private static final String ZIPENTRY_MASK = "java.util.zip.ZipEntry+"; // NOI18N
74+
private static final String ZIPENTRY_MASK = "java.util.zip.ZipEntry+"; // NOI18N
75+
private static final String LOGRECORD_MASK = "java.util.logging.LogRecord"; // NOI18N
6776

77+
private Formatter formatter = new SimpleFormatter();
78+
6879
public UtilDetailsProvider() {
6980
super(LOGGER_MASK, LEVEL_MASK, LOCALE_MASK, DATE_MASK, TIMEZONE_MASK,
70-
PATTERN_MASK, CURRENCY_MASK, ZIPENTRY_MASK);
81+
PATTERN_MASK, CURRENCY_MASK, ZIPENTRY_MASK, LOGRECORD_MASK);
7182
}
7283

7384
public String getDetailsString(String className, Instance instance, Heap heap) {
@@ -109,8 +120,74 @@ public String getDetailsString(String className, Instance instance, Heap heap) {
109120
return String.format("%s, size=%d", name, size); // NOI18N
110121
}
111122
return name;
123+
} else if (LOGRECORD_MASK.equals(className)) {
124+
return formatter.format(new DetailsLogRecord(instance, heap));
112125
}
113126
return null;
114127
}
115128

129+
private class DetailsLogRecord extends LogRecord {
130+
private final Instance record;
131+
private final Heap heap;
132+
133+
private DetailsLogRecord(Instance rec, Heap h) {
134+
super(Level.ALL, null);
135+
record = rec;
136+
heap = h;
137+
}
138+
139+
@Override
140+
public long getMillis() {
141+
Object time = record.getValueOfField("millis");
142+
if (time instanceof Number) {
143+
return ((Number)time).longValue();
144+
}
145+
return 0;
146+
}
147+
148+
@Override
149+
public String getSourceClassName() {
150+
return DetailsUtils.getInstanceFieldString(record, "sourceClassName", heap); // NOI18N
151+
}
152+
153+
@Override
154+
public String getSourceMethodName() {
155+
return DetailsUtils.getInstanceFieldString(record, "sourceMethodName", heap); // NOI18N
156+
}
157+
158+
@Override
159+
public String getLoggerName() {
160+
return DetailsUtils.getInstanceFieldString(record, "loggerName", heap); // NOI18N
161+
}
162+
163+
@Override
164+
public String getMessage() {
165+
return DetailsUtils.getInstanceFieldString(record, "message", heap); // NOI18N
166+
}
167+
168+
@Override
169+
public Object[] getParameters() {
170+
Object pars = record.getValueOfField("parameters");
171+
if (pars instanceof ObjectArrayInstance) {
172+
List parameters = new ArrayList();
173+
174+
for (Object o : ((ObjectArrayInstance)pars).getValues()) {
175+
String par = null;
176+
if (o instanceof Instance) {
177+
par = DetailsUtils.getInstanceString((Instance) o, heap);
178+
}
179+
if (par == null) par = "";
180+
parameters.add(par);
181+
}
182+
return parameters.toArray();
183+
}
184+
return null;
185+
}
186+
187+
@Override
188+
public Level getLevel() {
189+
String level = DetailsUtils.getInstanceFieldString(record, "level", heap); // NOI18N
190+
return Level.parse(level);
191+
}
192+
}
116193
}

0 commit comments

Comments
 (0)