< prev index next >

src/share/vm/logging/log.hpp

Print this page
rev 8933 : 8046148.01

@@ -21,14 +21,16 @@
  * questions.
  *
  */
 #ifndef SHARE_VM_LOGGING_LOG_HPP
 #define SHARE_VM_LOGGING_LOG_HPP
+
 #include "logging/logLevel.hpp"
 #include "logging/logPrefix.hpp"
 #include "logging/logTagSet.hpp"
 #include "logging/logTag.hpp"
+#include "memory/allocation.hpp"
 #include "utilities/debug.hpp"
 #include "utilities/ostream.hpp"
 
 //
 // Logging macros

@@ -71,12 +73,13 @@
 //     obj->print_on(log.debug_stream());
 //   }
 //
 #define LogHandle(...)  Log<LOG_TAGS(__VA_ARGS__)>
 
-template <LogTagType T0, LogTagType T1 = LogTag::__NO_TAG, LogTagType T2 = LogTag::__NO_TAG, LogTagType T3 = LogTag::__NO_TAG, LogTagType T4 = LogTag::__NO_TAG, LogTagType GuardTag = LogTag::__NO_TAG>
-class Log {
+template <LogTagType T0, LogTagType T1 = LogTag::__NO_TAG, LogTagType T2 = LogTag::__NO_TAG, LogTagType T3 = LogTag::__NO_TAG,
+          LogTagType T4 = LogTag::__NO_TAG, LogTagType GuardTag = LogTag::__NO_TAG>
+class Log VALUE_OBJ_CLASS_SPEC {
  private:
   static const size_t LogBufferSize = 512;
  public:
   // Make sure no more than the maximum number of tags have been given.
   // The GuardTag allows this to be detected if/when it happens. If the GuardTag

@@ -86,14 +89,32 @@
   static bool is_level(LogLevelType level) {
     return LogTagSetMapping<T0, T1, T2, T3, T4>::tagset().is_level(level);
   }
 
   template <LogLevelType Level>
-  static void write(const char* fmt, ...) ATTRIBUTE_PRINTF(1, 2);
+  ATTRIBUTE_PRINTF(1, 2)
+  static void write(const char* fmt, ...) {
+    va_list args;
+    va_start(args, fmt);
+    vwrite<Level>(fmt, args);
+    va_end(args);
+  };
+
+  template <LogLevelType Level>
+  ATTRIBUTE_PRINTF(1, 0)
+  static void vwrite(const char* fmt, va_list args) {
+    char buf[LogBufferSize];
+    size_t prefix_len = LogPrefix<T0, T1, T2, T3, T4>::prefix(buf, sizeof(buf));
+    int ret = vsnprintf(buf + prefix_len, sizeof(buf) - prefix_len, fmt, args);
+    assert(ret >= 0 && (size_t)ret < sizeof(buf), "Log message too long");
+    puts<Level>(buf);
+  }
 
   template <LogLevelType Level>
-  static void vwrite(const char* fmt, va_list args) ATTRIBUTE_PRINTF(1, 0);
+  static void puts(const char* string) {
+    LogTagSetMapping<T0, T1, T2, T3, T4>::tagset().log(Level, string);
+  }
 
 #define LOG_LEVEL(level, name) ATTRIBUTE_PRINTF(2, 0) \
   Log& v##name(const char* fmt, va_list args) { \
     vwrite<LogLevel::level>(fmt, args); \
     return *this; \

@@ -113,25 +134,6 @@
   }
   LOG_LEVEL_LIST
 #undef LOG_LEVEL
 };
 
-template <LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag>
-template <LogLevelType Level>
-void Log<T0, T1, T2, T3, T4, GuardTag>::write(const char* fmt, ...) {
-  va_list args;
-  va_start(args, fmt);
-  vwrite<Level>(fmt, args);
-  va_end(args);
-}
-
-template <LogTagType T0, LogTagType T1, LogTagType T2, LogTagType T3, LogTagType T4, LogTagType GuardTag>
-template <LogLevelType Level>
-void Log<T0, T1, T2, T3, T4, GuardTag>::vwrite(const char* fmt, va_list args) {
-  char buf[LogBufferSize];
-  size_t prefix_len = LogPrefix<T0, T1, T2, T3, T4>::prefix(buf, sizeof(buf));
-  int ret = vsnprintf(buf + prefix_len, sizeof(buf) - prefix_len, fmt, args);
-  assert(ret >= 0 && (size_t)ret < sizeof(buf), "Log message too long");
-  LogTagSetMapping<T0, T1, T2, T3, T4>::tagset().log(Level, buf);
-}
-
-#endif
+#endif // SHARE_VM_LOGGING_LOG_HPP
< prev index next >