RFR: 8273471: Add foldmultilines to UL for stdout/err [v2]
Ioi Lam
iklam at openjdk.java.net
Thu Sep 9 06:02:04 UTC 2021
On Thu, 9 Sep 2021 02:16:26 GMT, Yasumasa Suenaga <ysuenaga at openjdk.org> wrote:
>> We've introduced `foldmultilines` to UL in [JDK-8271186](https://bugs.openjdk.java.net/browse/JDK-8271186) (PR #4885 ) to replace newline characters within a multiline log event with the character sequence '' and 'n'. It helps to work log shippers.
>>
>> `foldmultilines` supports file output only. It is useful if it affects to stdout/err output because many container applications would redirect logs to stdout.
>>
>> `foldmultilines` will be enabled after option processing, so note that the log what happens before it isn't folded. AFAICS following logs might happen.
>> They are not practical concern because the log which happens before option processing is determinative and does not have newline char (at least now), so I think we can excuse they are not folded.
>>
>>
>> share/logging/logConfiguration.cpp:379: log_error(logging)("Missing terminating quote in -Xlog option '%s'", str);
>> share/logging/logConfiguration.cpp:397: log_warning(logging)("Ignoring excess -Xlog options: "%s"", str);
>>
>> share/prims/jvmtiTrace.cpp:91: log_warning(arguments)("-XX:+TraceJVMTI specified, "
>>
>> share/runtime/os.cpp:700: log_warning(malloc, free)("os::malloc caught, " SIZE_FORMAT " bytes --> " PTR_FORMAT, size, p2i(ptr));
>> share/runtime/os.cpp:752: log_warning(malloc, free)("os::realloc caught " PTR_FORMAT, p2i(memblock));
>> share/runtime/os.cpp:788: log_warning(malloc, free)("os::free caught " PTR_FORMAT, p2i(memblock));
>>
>>
>> I checked them with `$ grep -nrE '(warning|error)' * | grep -i log | grep -vwE '(cds|gc|safepoint|thread|codecache|symboltable|stringtable|jfr|jvmti|jni|container|pagesize|metaspace|exceptions|nmt|attach|class|handshake|monitorinflation)' | grep -vwE '(log_info|log_debug)'`
>>
>> In addition, we might see following logs which relate to UL:
>>
>>
>> [0.000s][error][logging] Error opening log file '/all-info.log': Permission denied
>> [0.000s][error][logging] Invalid tag 'aaa' in log selection.
>> [0.000s][error][logging] Invalid level 'aaa' in log selection.
>> [0.012s][error][logging] Invalid option 'aaa' for log output (file=all-info.log).
>> [0.021s][error][logging] Unable to log to file all-info.log with log file rotation: all-info.log is not a regular file
>> [0.012s][error][logging] Initialization of output 'file=all-info.log' using options 'aaa=bbb' failed.
>
> Yasumasa Suenaga has updated the pull request incrementally with one additional commit since the last revision:
>
> Fix comments
Also, if the user specifies foldmultilines multiple times for stdout/stderr
-Xlog:exceptions:::foldmultilines=true -Xlog:cds:::foldmultilines=false
Do we (or should) we print a warning message?
Today we'd get an warning with a command like the following, and the second foldmultilines=false is ignored. I think stdout/stderr should have the same behavior. (But the current message is too vague and should be improved, maybe in a different RFE).
$ java -Xlog:exceptions:file=foo::foldmultilines=true -Xlog:cds:file=foo::foldmultilines=false XXX
[0.000s][warning][logging] Output options for existing outputs are ignored.
Error: Could not find or load main class XXX
Caused by: java.lang.ClassNotFoundException: XXX
test/hotspot/jtreg/runtime/logging/FoldMultilinesTest.java line 102:
> 100: test("file=" + EXCEPTION_LOG_FILE);
> 101: test("stdout");
> 102: test("stderr");
I think we should add a case whe the output is not explicitly specified. I.e.,
-Xlog:exceptions=info:::foldmultilines=true
-------------
Changes requested by iklam (Reviewer).
PR: https://git.openjdk.java.net/jdk/pull/5407
More information about the hotspot-runtime-dev
mailing list