< prev index next >

src/share/vm/logging/logFileStreamOutput.hpp

Print this page
rev 12117 : 8146009:

@@ -28,10 +28,18 @@
 #include "logging/logOutput.hpp"
 #include "utilities/globalDefinitions.hpp"
 
 class LogDecorations;
 
+class LogFileStreamInitializer {
+ public:
+  LogFileStreamInitializer();
+};
+
+// Ensure the default log streams have been initialized (stdout, stderr) using the static initializer below
+static LogFileStreamInitializer log_stream_initializer;
+
 // Base class for all FileStream-based log outputs.
 class LogFileStreamOutput : public LogOutput {
  protected:
   FILE*               _stream;
   size_t              _decorator_padding[LogDecorators::Count];

@@ -48,13 +56,12 @@
   virtual int write(const LogDecorations& decorations, const char* msg);
   virtual int write(LogMessageBuffer::Iterator msg_iterator);
 };
 
 class LogStdoutOutput : public LogFileStreamOutput {
-  friend class LogOutput;
+  friend class LogFileStreamInitializer;
  private:
-  static LogStdoutOutput _instance;
   LogStdoutOutput() : LogFileStreamOutput(stdout) {
     set_config_string("all=warning");
   }
   virtual bool initialize(const char* options, outputStream* errstream) {
     return false;

@@ -64,13 +71,12 @@
     return "stdout";
   }
 };
 
 class LogStderrOutput : public LogFileStreamOutput {
-  friend class LogOutput;
+  friend class LogFileStreamInitializer;
  private:
-  static LogStderrOutput _instance;
   LogStderrOutput() : LogFileStreamOutput(stderr) {
     set_config_string("all=off");
   }
   virtual bool initialize(const char* options, outputStream* errstream) {
     return false;

@@ -79,6 +85,9 @@
   virtual const char* name() const {
     return "stderr";
   }
 };
 
+extern LogStderrOutput &StderrLog;
+extern LogStdoutOutput &StdoutLog;
+
 #endif // SHARE_VM_LOGGING_LOGFILESTREAMOUTPUT_HPP
< prev index next >