1 /* 2 * Copyright (c) 2016, 2017, Red Hat, Inc. All rights reserved. 3 * 4 * This code is free software; you can redistribute it and/or modify it 5 * under the terms of the GNU General Public License version 2 only, as 6 * published by the Free Software Foundation. 7 * 8 * This code is distributed in the hope that it will be useful, but WITHOUT 9 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 10 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 11 * version 2 for more details (a copy is included in the LICENSE file that 12 * accompanied this code). 13 * 14 * You should have received a copy of the GNU General Public License version 15 * 2 along with this work; if not, write to the Free Software Foundation, 16 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 17 * 18 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 19 * or visit www.oracle.com if you need additional information or have any 20 * questions. 21 * 22 */ 23 24 #ifndef SHARE_VM_GC_SHENANDOAH_SHENANDOAHLOGGING_HPP 25 #define SHARE_VM_GC_SHENANDOAH_SHENANDOAHLOGGING_HPP 26 27 #include <stdio.h> // for va_list and friends 28 #include <stdarg.h> 29 30 class ShenandoahLogger { 31 public: 32 static void handle_trace(const char* format, ...); 33 static void handle_debug(const char* format, ...); 34 static void handle_info(const char* format, ...); 35 static void handle_warning(const char* format, ...); 36 private: 37 static void handle_generic(const char* format, va_list ap); 38 }; 39 40 #define log_trace(...) if (ShenandoahLogTrace) ShenandoahLogger::handle_trace 41 #define log_debug(...) if (ShenandoahLogDebug) ShenandoahLogger::handle_debug 42 #define log_warning(...) if (ShenandoahLogWarning) ShenandoahLogger::handle_warning 43 44 // With ShenandoahLogInfo, only print out the single-"gc"-tag messages. 45 #define log_info(...) if (((strcmp(#__VA_ARGS__, "gc") == 0) && (ShenandoahLogInfo || PrintGC || PrintGCDetails)) || \ 46 ((strcmp(#__VA_ARGS__, "gc") > 0) && (ShenandoahLogInfo || PrintGCDetails)) || \ 47 ShenandoahLogDebug) \ 48 ShenandoahLogger::handle_info 49 50 #ifndef PRODUCT 51 #define log_develop_trace(...) if (ShenandoahLogTrace) ShenandoahLogger::handle_trace 52 #define log_develop_debug(...) if (ShenandoahLogDebug) ShenandoahLogger::handle_debug 53 #else 54 #define DUMMY_ARGUMENT_CONSUMER(...) 55 #define log_develop_trace(...) DUMMY_ARGUMENT_CONSUMER 56 #define log_develop_debug(...) DUMMY_ARGUMENT_CONSUMER 57 #endif 58 59 #endif