RFR: 8154791: Xlog classload too redundant msgs info/debug
Ioi Lam
ioi.lam at oracle.com
Tue May 2 18:48:33 UTC 2017
Hi Rachel,
There are a few reasons why the current output has duplications. The
"logging levels are not mutually exclusive" comment means this:
java -Xlog:class+load=debug:file=debug.log
-Xlog:class+load=info:file=info.log
So info.log contains only the info level logs, but debug.log contains
both info and debug level logs.
Ideally I want info.log to contain this:
[0.162s][info ][class,load] java.lang.Comparable source: jrt:/java.base
.. and debug.log to contain this:
[0.162s][debug ][class,load] java.lang.Comparable source: jrt:/java.base
[NULL class_loader] 0x00000007c00013a8 super: 0x00000007c0000fb0 bytes: 235
checksum: a75dadb6
Your current patch splits out the debug log into several lines. This
makes it difficult to analyze the log when classes are loaded
concurrently on different threads:
[0.162s][info ][class,load] java.lang.Comparable source: jrt:/java.base
[0.162s][info ][class,load] java.lang.Comparable loader: [NULL class_loader]
[0.162s][debug][class,load] java.lang.Comparable klass: 0x00000007c00013a8
[0.163s][info ][class,load] java.lang.String source: jrt:/java.base <<<
oops! from a different thread
[0.164s][debug][class,load] java.lang.Comparable super: 0x00000007c0000fb0
[0.164s][info ][class,load] java.lang.Comparable bytes: 235
[0.164s][info ][class,load] java.lang.Comparable checksum: a75dadb6
Because the leveling in UL is by lines, in JDK-8079408, where this was
first implemented, I couldn't find a way to print "java.lang.Comparable
source: jrt:/java.base" in "info" mode, and print the rest in "debug"
mode, while keeping the whole thing on the same line (in both the
info.log and debug.log files). That's why we have the 2 lines with
duplicated info.
I think it's really important to keep everything on the same line (the
output needs to be processed automatically by scripts). With the current
UL restrictions, I think the only way to do it is make the "info"
logging more verbose when "debug" level is selected. E.g.,
outputStream* info_log = Log(class, load)::info_stream();
info_log->print("%s", ext_name);
info_log->print_cr(" source: jrt:/%s", module_name); ....
if (log_is_enabled(Debug, class, load)) { // always print to info
log, even if debug is selected
info_log->print(" klass: " INTPTR_FORMAT, p2i(this));
....
}
So now info.log and debug.log will have the same logs, but oh well .....
Thanks
- Ioi
On 5/2/17 10:32 AM, Rachel Protacio wrote:
> Hello!
>
> Please review this enhancement correcting redundancies and neatening
> up the -Xlog:class+load code. The redundancy in the code before I
> believe stemmed from a misunderstanding about logging levels (the
> comment saying they are not mutually exclusive was misleading).
>
> Tested with JPRT and RBT.
>
> Bug: https://bugs.openjdk.java.net/browse/JDK-8154791
> Webrev: http://cr.openjdk.java.net/~rprotacio/8154791.00
>
> Thanks,
> Rachel
More information about the hotspot-runtime-dev
mailing list