--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/src/hotspot/share/logging/logDecorators.hpp Tue Sep 12 19:03:39 2017 +0200
@@ -0,0 +1,117 @@
+/*
+ * Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.
+ *
+ * This code is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ *
+ */
+#ifndef SHARE_VM_LOGGING_LOGDECORATORS_HPP
+#define SHARE_VM_LOGGING_LOGDECORATORS_HPP
+
+#include "memory/allocation.hpp"
+#include "utilities/globalDefinitions.hpp"
+
+// The list of available decorators:
+// time - Current time and date in ISO-8601 format
+// uptime - Time since the start of the JVM in seconds and milliseconds (e.g., 6.567s)
+// timemillis - The same value as generated by System.currentTimeMillis()
+// uptimemillis - Milliseconds since the JVM started
+// timenanos - The same value as generated by System.nanoTime()
+// uptimenanos - Nanoseconds since the JVM started
+// hostname - The hostname
+// pid - The process identifier
+// tid - The thread identifier
+// level - The level associated with the log message
+// tags - The tag-set associated with the log message
+#define DECORATOR_LIST \
+ DECORATOR(time, t) \
+ DECORATOR(utctime, utc) \
+ DECORATOR(uptime, u) \
+ DECORATOR(timemillis, tm) \
+ DECORATOR(uptimemillis, um) \
+ DECORATOR(timenanos, tn) \
+ DECORATOR(uptimenanos, un) \
+ DECORATOR(hostname, hn) \
+ DECORATOR(pid, p) \
+ DECORATOR(tid, ti) \
+ DECORATOR(level, l) \
+ DECORATOR(tags, tg)
+
+// LogDecorators represents a selection of decorators that should be prepended to
+// each log message for a given output. Decorators are always prepended in the order
+// declared above. For example, logging with 'uptime, level, tags' decorators results in:
+// [0,943s][info ][logging] message.
+class LogDecorators VALUE_OBJ_CLASS_SPEC {
+ public:
+ enum Decorator {
+#define DECORATOR(name, abbr) name##_decorator,
+ DECORATOR_LIST
+#undef DECORATOR
+ Count,
+ Invalid
+ };
+
+ private:
+ uint _decorators;
+ static const char* _name[][2];
+ static const uint DefaultDecoratorsMask = (1 << uptime_decorator) | (1 << level_decorator) | (1 << tags_decorator);
+
+ static uint mask(LogDecorators::Decorator decorator) {
+ return 1 << decorator;
+ }
+
+ LogDecorators(uint mask) : _decorators(mask) {
+ }
+
+ public:
+ static const LogDecorators None;
+
+ LogDecorators() : _decorators(DefaultDecoratorsMask) {
+ };
+
+ void clear() {
+ _decorators = 0;
+ }
+
+ static const char* name(LogDecorators::Decorator decorator) {
+ return _name[decorator][0];
+ }
+
+ static const char* abbreviation(LogDecorators::Decorator decorator) {
+ return _name[decorator][1];
+ }
+
+ static LogDecorators::Decorator from_string(const char* str);
+
+ void combine_with(const LogDecorators &source) {
+ _decorators |= source._decorators;
+ }
+
+ bool is_empty() const {
+ return _decorators == 0;
+ }
+
+ bool is_decorator(LogDecorators::Decorator decorator) const {
+ return (_decorators & mask(decorator)) != 0;
+ }
+
+ bool parse(const char* decorator_args, outputStream* errstream = NULL);
+};
+
+#endif // SHARE_VM_LOGGING_LOGDECORATORS_HPP