提交 967ad215 编写于 作者: E egahlin

8209960: -Xlog:jfr* doesn't work with the JFR

Reviewed-by: mgronlun
上级 f5480510
...@@ -80,4 +80,7 @@ public final class JVMSupport { ...@@ -80,4 +80,7 @@ public final class JVMSupport {
public static boolean isNotAvailable() { public static boolean isNotAvailable() {
return notAvailable; return notAvailable;
} }
public static void tryToInitializeJVM() {
}
} }
...@@ -80,19 +80,11 @@ public enum LogTag { ...@@ -80,19 +80,11 @@ public enum LogTag {
JFR_DCMD(10); JFR_DCMD(10);
/* set from native side */ /* set from native side */
private volatile int tagSetLevel = 100; // prevent logging if JVM log system has not been initialized volatile int tagSetLevel = 100; // prevent logging if JVM log system has not been initialized
final int id; final int id;
LogTag(int tagId) { LogTag(int tagId) {
id = tagId; id = tagId;
} }
public boolean shouldLog(int level) {
return true;// XXX level >= tagSetLevel;
}
public boolean shouldLog(LogLevel logLevel) {
return shouldLog(logLevel.level);
}
} }
...@@ -35,15 +35,20 @@ import java.util.function.Supplier; ...@@ -35,15 +35,20 @@ import java.util.function.Supplier;
public final class Logger { public final class Logger {
private final static int MAX_SIZE = 10000; private final static int MAX_SIZE = 10000;
static {
// This will try to initialize the JVM logging system
JVMSupport.tryToInitializeJVM();
}
public static void log(LogTag logTag, LogLevel logLevel, String message) { public static void log(LogTag logTag, LogLevel logLevel, String message) {
if (logTag.shouldLog(logLevel.level)) { if (shouldLog(logTag, logLevel)) {
logInternal(logTag, logLevel, message); logInternal(logTag, logLevel, message);
} }
} }
public static void log(LogTag logTag, LogLevel logLevel, Supplier<String> messageSupplier) { public static void log(LogTag logTag, LogLevel logLevel, Supplier<String> messageSupplier) {
if (logTag.shouldLog(logLevel.level)) { if (shouldLog(logTag, logLevel)) {
logInternal(logTag, logLevel, messageSupplier.get()); logInternal(logTag, logLevel, messageSupplier.get());
} }
} }
...@@ -55,4 +60,10 @@ public final class Logger { ...@@ -55,4 +60,10 @@ public final class Logger {
JVM.log(logTag.id, logLevel.level, message.substring(0, MAX_SIZE)); JVM.log(logTag.id, logLevel.level, message.substring(0, MAX_SIZE));
} }
} }
public static boolean shouldLog(LogTag tag, LogLevel level) {
// Logging level is not initialized because of lack of Xlog support in jdk8,
// so this method returns true directly now.
return true; // TODO: level.level >= tag.tagSetLevel;
}
} }
...@@ -79,7 +79,7 @@ final class MetadataReader { ...@@ -79,7 +79,7 @@ final class MetadataReader {
descriptor.gmtOffset = time.attribute(MetadataDescriptor.ATTRIBUTE_GMT_OFFSET, 1); descriptor.gmtOffset = time.attribute(MetadataDescriptor.ATTRIBUTE_GMT_OFFSET, 1);
descriptor.locale = time.attribute(MetadataDescriptor.ATTRIBUTE_LOCALE, ""); descriptor.locale = time.attribute(MetadataDescriptor.ATTRIBUTE_LOCALE, "");
descriptor.root = root; descriptor.root = root;
if (LogTag.JFR_SYSTEM_PARSER.shouldLog(LogLevel.TRACE.level)) { if (Logger.shouldLog(LogTag.JFR_SYSTEM_PARSER, LogLevel.TRACE)) {
List<Type> ts = new ArrayList<>(types.values()); List<Type> ts = new ArrayList<>(types.values());
Collections.sort(ts, (x,y) -> x.getName().compareTo(y.getName())); Collections.sort(ts, (x,y) -> x.getName().compareTo(y.getName()));
for (Type t : ts) { for (Type t : ts) {
......
...@@ -453,7 +453,7 @@ public final class PlatformRecording implements AutoCloseable { ...@@ -453,7 +453,7 @@ public final class PlatformRecording implements AutoCloseable {
} }
private void setSettings(Map<String, String> settings, boolean update) { private void setSettings(Map<String, String> settings, boolean update) {
if (LogTag.JFR_SETTING.shouldLog(LogLevel.INFO.level) && update) { if (Logger.shouldLog(LogTag.JFR_SETTING, LogLevel.INFO) && update) {
TreeMap<String, String> ordered = new TreeMap<>(settings); TreeMap<String, String> ordered = new TreeMap<>(settings);
Logger.log(LogTag.JFR_SETTING, LogLevel.INFO, "New settings for recording \"" + getName() + "\" (" + getId() + ")"); Logger.log(LogTag.JFR_SETTING, LogLevel.INFO, "New settings for recording \"" + getName() + "\" (" + getId() + ")");
for (Map.Entry<String, String> entry : ordered.entrySet()) { for (Map.Entry<String, String> entry : ordered.entrySet()) {
......
...@@ -140,7 +140,7 @@ final class SettingsManager { ...@@ -140,7 +140,7 @@ final class SettingsManager {
ec.disable(); ec.disable();
} }
} else { } else {
if (LogTag.JFR_SETTING.shouldLog(LogLevel.INFO.level)) { if (Logger.shouldLog(LogTag.JFR_SETTING, LogLevel.INFO)) {
Collections.sort(eventControls, (x,y) -> x.getEventType().getName().compareTo(y.getEventType().getName())); Collections.sort(eventControls, (x,y) -> x.getEventType().getName().compareTo(y.getEventType().getName()));
} }
for (EventControl ec : eventControls) { for (EventControl ec : eventControls) {
...@@ -225,7 +225,7 @@ final class SettingsManager { ...@@ -225,7 +225,7 @@ final class SettingsManager {
if (values != null) { if (values != null) {
control.apply(values); control.apply(values);
String after = control.getLastValue(); String after = control.getLastValue();
if (LogTag.JFR_SETTING.shouldLog(LogLevel.INFO.level)) { if (Logger.shouldLog(LogTag.JFR_SETTING, LogLevel.INFO)) {
if (Utils.isSettingVisible(control, ec.getEventType().hasEventHook())) { if (Utils.isSettingVisible(control, ec.getEventType().hasEventHook())) {
if (values.size() > 1) { if (values.size() > 1) {
StringJoiner sj = new StringJoiner(", ", "{", "}"); StringJoiner sj = new StringJoiner(", ", "{", "}");
...@@ -242,7 +242,7 @@ final class SettingsManager { ...@@ -242,7 +242,7 @@ final class SettingsManager {
} }
} else { } else {
control.setDefault(); control.setDefault();
if (LogTag.JFR_SETTING.shouldLog(LogLevel.INFO.level)) { if (Logger.shouldLog(LogTag.JFR_SETTING, LogLevel.INFO)) {
String message = " " + settingName + "=\"" + control.getLastValue() + "\""; String message = " " + settingName + "=\"" + control.getLastValue() + "\"";
Logger.log(LogTag.JFR_SETTING, LogLevel.INFO, message); Logger.log(LogTag.JFR_SETTING, LogLevel.INFO, message);
} }
......
...@@ -275,7 +275,7 @@ public class Type implements Comparable<Type> { ...@@ -275,7 +275,7 @@ public class Type implements Comparable<Type> {
} }
void log(String action, LogTag logTag, LogLevel level) { void log(String action, LogTag logTag, LogLevel level) {
if (logTag.shouldLog(level.level) && !isSimpleType()) { if (Logger.shouldLog(logTag, level) && !isSimpleType()) {
Logger.log(logTag, LogLevel.TRACE, action + " " + typeText() + " " + getLogName() + " {"); Logger.log(logTag, LogLevel.TRACE, action + " " + typeText() + " " + getLogName() + " {");
for (ValueDescriptor v : getFields()) { for (ValueDescriptor v : getFields()) {
String array = v.isArray() ? "[]" : ""; String array = v.isArray() ? "[]" : "";
...@@ -283,7 +283,7 @@ public class Type implements Comparable<Type> { ...@@ -283,7 +283,7 @@ public class Type implements Comparable<Type> {
} }
Logger.log(logTag, LogLevel.TRACE, "}"); Logger.log(logTag, LogLevel.TRACE, "}");
} else { } else {
if (logTag.shouldLog(LogLevel.INFO.level) && !isSimpleType()) { if (Logger.shouldLog(logTag, LogLevel.INFO) && !isSimpleType()) {
Logger.log(logTag, LogLevel.INFO, action + " " + typeText() + " " + getLogName()); Logger.log(logTag, LogLevel.INFO, action + " " + typeText() + " " + getLogName());
} }
} }
......
...@@ -69,7 +69,7 @@ public final class TypeLibrary { ...@@ -69,7 +69,7 @@ public final class TypeLibrary {
private TypeLibrary(List<Type> jvmTypes) { private TypeLibrary(List<Type> jvmTypes) {
visitReachable(jvmTypes, t -> !types.containsKey(t.getId()), t -> types.put(t.getId(), t)); visitReachable(jvmTypes, t -> !types.containsKey(t.getId()), t -> types.put(t.getId(), t));
if (LogTag.JFR_SYSTEM_METADATA.shouldLog(LogLevel.INFO.level)) { if (Logger.shouldLog(LogTag.JFR_SYSTEM_METADATA, LogLevel.INFO)) {
Stream<Type> s = types.values().stream().sorted((x, y) -> Long.compare(x.getId(), y.getId())); Stream<Type> s = types.values().stream().sorted((x, y) -> Long.compare(x.getId(), y.getId()));
s.forEach(t -> t.log("Added", LogTag.JFR_SYSTEM_METADATA, LogLevel.INFO)); s.forEach(t -> t.log("Added", LogTag.JFR_SYSTEM_METADATA, LogLevel.INFO));
} }
...@@ -423,7 +423,7 @@ public final class TypeLibrary { ...@@ -423,7 +423,7 @@ public final class TypeLibrary {
for (Type type : types.values()) { for (Type type : types.values()) {
if (type.getRemove() && !Type.isDefinedByJVM(type.getId())) { if (type.getRemove() && !Type.isDefinedByJVM(type.getId())) {
removeIds.add(type.getId()); removeIds.add(type.getId());
if (LogTag.JFR_METADATA.shouldLog(LogLevel.TRACE.level)) { if (Logger.shouldLog(LogTag.JFR_METADATA, LogLevel.TRACE)) {
Logger.log(LogTag.JFR_METADATA, LogLevel.TRACE, "Removed obsolete metadata " + type.getName()); Logger.log(LogTag.JFR_METADATA, LogLevel.TRACE, "Removed obsolete metadata " + type.getName());
} }
} }
......
...@@ -64,7 +64,7 @@ final class DCmdCheck extends AbstractDCmd { ...@@ -64,7 +64,7 @@ final class DCmdCheck extends AbstractDCmd {
} }
private void executeInternal(String name, Boolean verbose) throws DCmdException { private void executeInternal(String name, Boolean verbose) throws DCmdException {
if (LogTag.JFR_DCMD.shouldLog(LogLevel.DEBUG)) { if (Logger.shouldLog(LogTag.JFR_DCMD, LogLevel.DEBUG)) {
Logger.log(LogTag.JFR_DCMD, LogLevel.DEBUG, "Executing DCmdCheck: name=" + name + ", verbose=" + verbose); Logger.log(LogTag.JFR_DCMD, LogLevel.DEBUG, "Executing DCmdCheck: name=" + name + ", verbose=" + verbose);
} }
......
...@@ -70,7 +70,7 @@ final class DCmdConfigure extends AbstractDCmd { ...@@ -70,7 +70,7 @@ final class DCmdConfigure extends AbstractDCmd {
Boolean sampleThreads Boolean sampleThreads
) throws DCmdException { ) throws DCmdException {
if (LogTag.JFR_DCMD.shouldLog(LogLevel.DEBUG)) { if (Logger.shouldLog(LogTag.JFR_DCMD, LogLevel.DEBUG)) {
Logger.log(LogTag.JFR_DCMD, LogLevel.DEBUG, "Executing DCmdConfigure: repositorypath=" + repositoryPath + Logger.log(LogTag.JFR_DCMD, LogLevel.DEBUG, "Executing DCmdConfigure: repositorypath=" + repositoryPath +
", dumppath=" + dumpPath + ", dumppath=" + dumpPath +
", stackdepth=" + stackDepth + ", stackdepth=" + stackDepth +
......
...@@ -70,7 +70,7 @@ final class DCmdDump extends AbstractDCmd { ...@@ -70,7 +70,7 @@ final class DCmdDump extends AbstractDCmd {
* @throws DCmdException if the dump could not be completed * @throws DCmdException if the dump could not be completed
*/ */
public String execute(String name, String filename, Long maxAge, Long maxSize, String begin, String end, Boolean pathToGcRoots) throws DCmdException { public String execute(String name, String filename, Long maxAge, Long maxSize, String begin, String end, Boolean pathToGcRoots) throws DCmdException {
if (LogTag.JFR_DCMD.shouldLog(LogLevel.DEBUG)) { if (Logger.shouldLog(LogTag.JFR_DCMD, LogLevel.DEBUG)) {
Logger.log(LogTag.JFR_DCMD, LogLevel.DEBUG, Logger.log(LogTag.JFR_DCMD, LogLevel.DEBUG,
"Executing DCmdDump: name=" + name + "Executing DCmdDump: name=" + name +
", filename=" + filename + ", filename=" + filename +
......
...@@ -82,7 +82,7 @@ final class DCmdStart extends AbstractDCmd { ...@@ -82,7 +82,7 @@ final class DCmdStart extends AbstractDCmd {
*/ */
@SuppressWarnings("resource") @SuppressWarnings("resource")
public String execute(String name, String[] settings, Long delay, Long duration, Boolean disk, String path, Long maxAge, Long maxSize, Boolean dumpOnExit, Boolean pathToGcRoots) throws DCmdException { public String execute(String name, String[] settings, Long delay, Long duration, Boolean disk, String path, Long maxAge, Long maxSize, Boolean dumpOnExit, Boolean pathToGcRoots) throws DCmdException {
if (LogTag.JFR_DCMD.shouldLog(LogLevel.DEBUG)) { if (Logger.shouldLog(LogTag.JFR_DCMD, LogLevel.DEBUG)) {
Logger.log(LogTag.JFR_DCMD, LogLevel.DEBUG, "Executing DCmdStart: name=" + name + Logger.log(LogTag.JFR_DCMD, LogLevel.DEBUG, "Executing DCmdStart: name=" + name +
", settings=" + (settings != null ? Arrays.asList(settings) : "(none)") + ", settings=" + (settings != null ? Arrays.asList(settings) : "(none)") +
", delay=" + delay + ", delay=" + delay +
...@@ -110,11 +110,6 @@ final class DCmdStart extends AbstractDCmd { ...@@ -110,11 +110,6 @@ final class DCmdStart extends AbstractDCmd {
throw new DCmdException("No settings specified. Use settings=none to start without any settings"); throw new DCmdException("No settings specified. Use settings=none to start without any settings");
} }
Map<String, String> s = new HashMap<>(); Map<String, String> s = new HashMap<>();
if (settings == null || settings.length == 0) {
settings = new String[] { "default" };
}
for (String configName : settings) { for (String configName : settings) {
try { try {
s.putAll(JFC.createKnown(configName).getSettings()); s.putAll(JFC.createKnown(configName).getSettings());
......
...@@ -56,7 +56,7 @@ final class DCmdStop extends AbstractDCmd { ...@@ -56,7 +56,7 @@ final class DCmdStop extends AbstractDCmd {
* @throws DCmdException if recording could not be stopped * @throws DCmdException if recording could not be stopped
*/ */
public String execute(String name, String filename) throws DCmdException { public String execute(String name, String filename) throws DCmdException {
if (LogTag.JFR_DCMD.shouldLog(LogLevel.DEBUG)) { if (Logger.shouldLog(LogTag.JFR_DCMD, LogLevel.DEBUG)) {
Logger.log(LogTag.JFR_DCMD, LogLevel.DEBUG, "Executing DCmdStart: name=" + name + ", filename=" + filename); Logger.log(LogTag.JFR_DCMD, LogLevel.DEBUG, "Executing DCmdStart: name=" + name + ", filename=" + filename);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册