--- a/hotspot/src/share/vm/logging/log.cpp Tue Apr 05 00:41:55 2016 +0200
+++ b/hotspot/src/share/vm/logging/log.cpp Tue Apr 05 10:35:39 2016 +0200
@@ -31,6 +31,7 @@
#include "logging/log.hpp"
#include "logging/logConfiguration.hpp"
#include "logging/logOutput.hpp"
+#include "logging/logStream.inline.hpp"
#include "memory/resourceArea.hpp"
#define assert_str_eq(s1, s2) \
@@ -315,4 +316,58 @@
Test_logtarget_off();
}
+
+static void Test_logstream_helper(outputStream* stream) {
+ TestLogFile log_file("log_stream");
+ TestLogSavedConfig tlsc(log_file.name(), "gc=debug");
+
+ // Try to log, but expect this to be filtered out.
+ stream->print("%d ", 3); stream->print("workers"); stream->cr();
+
+ FILE* fp = fopen(log_file.name(), "r");
+ assert(fp != NULL, "File read error");
+
+ char output[256 /* Large enough buffer */];
+ char* res = fgets(output, sizeof(output), fp);
+ assert(res != NULL, "assert");
+
+ assert(strstr(output, "3 workers") != NULL, "log line missing");
+
+ fclose(fp);
+}
+
+static void Test_logstream_log() {
+ Log(gc) log;
+ LogStream stream(log.debug());
+
+ Test_logstream_helper(&stream);
+}
+
+static void Test_logstream_logtarget() {
+ LogTarget(Debug, gc) log;
+ LogStream stream(log);
+
+ Test_logstream_helper(&stream);
+}
+
+static void Test_logstream_logstreamhandle() {
+ LogStreamHandle(Debug, gc) stream;
+
+ Test_logstream_helper(&stream);
+}
+
+static void Test_logstream_no_rm() {
+ ResourceMark rm;
+ outputStream* stream = LogTarget(Debug, gc)::stream();
+
+ Test_logstream_helper(stream);
+}
+
+void Test_logstream() {
+ Test_logstream_log();
+ Test_logstream_logtarget();
+ Test_logstream_logstreamhandle();
+ Test_logstream_no_rm();
+}
+
#endif // PRODUCT