Austin Schuh | 906616c | 2019-01-21 20:25:11 -0800 | [diff] [blame^] | 1 | // This file is automatically generated from src/glog/raw_logging.h.in |
| 2 | // using src/windows/preprocess.sh. |
| 3 | // DO NOT EDIT! |
| 4 | |
| 5 | // Copyright (c) 2006, Google Inc. |
| 6 | // All rights reserved. |
| 7 | // |
| 8 | // Redistribution and use in source and binary forms, with or without |
| 9 | // modification, are permitted provided that the following conditions are |
| 10 | // met: |
| 11 | // |
| 12 | // * Redistributions of source code must retain the above copyright |
| 13 | // notice, this list of conditions and the following disclaimer. |
| 14 | // * Redistributions in binary form must reproduce the above |
| 15 | // copyright notice, this list of conditions and the following disclaimer |
| 16 | // in the documentation and/or other materials provided with the |
| 17 | // distribution. |
| 18 | // * Neither the name of Google Inc. nor the names of its |
| 19 | // contributors may be used to endorse or promote products derived from |
| 20 | // this software without specific prior written permission. |
| 21 | // |
| 22 | // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| 23 | // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| 24 | // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| 25 | // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| 26 | // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| 27 | // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| 28 | // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| 29 | // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| 30 | // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| 31 | // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| 32 | // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| 33 | // |
| 34 | // Author: Maxim Lifantsev |
| 35 | // |
| 36 | // Thread-safe logging routines that do not allocate any memory or |
| 37 | // acquire any locks, and can therefore be used by low-level memory |
| 38 | // allocation and synchronization code. |
| 39 | |
| 40 | #ifndef BASE_RAW_LOGGING_H_ |
| 41 | #define BASE_RAW_LOGGING_H_ |
| 42 | |
| 43 | #include <time.h> |
| 44 | |
| 45 | namespace google { |
| 46 | |
| 47 | #include "glog/log_severity.h" |
| 48 | #include "glog/vlog_is_on.h" |
| 49 | |
| 50 | // Annoying stuff for windows -- makes sure clients can import these functions |
| 51 | #ifndef GOOGLE_GLOG_DLL_DECL |
| 52 | # if defined(_WIN32) && !defined(__CYGWIN__) |
| 53 | # define GOOGLE_GLOG_DLL_DECL __declspec(dllimport) |
| 54 | # else |
| 55 | # define GOOGLE_GLOG_DLL_DECL |
| 56 | # endif |
| 57 | #endif |
| 58 | |
| 59 | // This is similar to LOG(severity) << format... and VLOG(level) << format.., |
| 60 | // but |
| 61 | // * it is to be used ONLY by low-level modules that can't use normal LOG() |
| 62 | // * it is desiged to be a low-level logger that does not allocate any |
| 63 | // memory and does not need any locks, hence: |
| 64 | // * it logs straight and ONLY to STDERR w/o buffering |
| 65 | // * it uses an explicit format and arguments list |
| 66 | // * it will silently chop off really long message strings |
| 67 | // Usage example: |
| 68 | // RAW_LOG(ERROR, "Failed foo with %i: %s", status, error); |
| 69 | // RAW_VLOG(3, "status is %i", status); |
| 70 | // These will print an almost standard log lines like this to stderr only: |
| 71 | // E0821 211317 file.cc:123] RAW: Failed foo with 22: bad_file |
| 72 | // I0821 211317 file.cc:142] RAW: status is 20 |
| 73 | #define RAW_LOG(severity, ...) \ |
| 74 | do { \ |
| 75 | switch (google::GLOG_ ## severity) { \ |
| 76 | case 0: \ |
| 77 | RAW_LOG_INFO(__VA_ARGS__); \ |
| 78 | break; \ |
| 79 | case 1: \ |
| 80 | RAW_LOG_WARNING(__VA_ARGS__); \ |
| 81 | break; \ |
| 82 | case 2: \ |
| 83 | RAW_LOG_ERROR(__VA_ARGS__); \ |
| 84 | break; \ |
| 85 | case 3: \ |
| 86 | RAW_LOG_FATAL(__VA_ARGS__); \ |
| 87 | break; \ |
| 88 | default: \ |
| 89 | break; \ |
| 90 | } \ |
| 91 | } while (0) |
| 92 | |
| 93 | // The following STRIP_LOG testing is performed in the header file so that it's |
| 94 | // possible to completely compile out the logging code and the log messages. |
| 95 | #if STRIP_LOG == 0 |
| 96 | #define RAW_VLOG(verboselevel, ...) \ |
| 97 | do { \ |
| 98 | if (VLOG_IS_ON(verboselevel)) { \ |
| 99 | RAW_LOG_INFO(__VA_ARGS__); \ |
| 100 | } \ |
| 101 | } while (0) |
| 102 | #else |
| 103 | #define RAW_VLOG(verboselevel, ...) RawLogStub__(0, __VA_ARGS__) |
| 104 | #endif // STRIP_LOG == 0 |
| 105 | |
| 106 | #if STRIP_LOG == 0 |
| 107 | #define RAW_LOG_INFO(...) google::RawLog__(google::GLOG_INFO, \ |
| 108 | __FILE__, __LINE__, __VA_ARGS__) |
| 109 | #else |
| 110 | #define RAW_LOG_INFO(...) google::RawLogStub__(0, __VA_ARGS__) |
| 111 | #endif // STRIP_LOG == 0 |
| 112 | |
| 113 | #if STRIP_LOG <= 1 |
| 114 | #define RAW_LOG_WARNING(...) google::RawLog__(google::GLOG_WARNING, \ |
| 115 | __FILE__, __LINE__, __VA_ARGS__) |
| 116 | #else |
| 117 | #define RAW_LOG_WARNING(...) google::RawLogStub__(0, __VA_ARGS__) |
| 118 | #endif // STRIP_LOG <= 1 |
| 119 | |
| 120 | #if STRIP_LOG <= 2 |
| 121 | #define RAW_LOG_ERROR(...) google::RawLog__(google::GLOG_ERROR, \ |
| 122 | __FILE__, __LINE__, __VA_ARGS__) |
| 123 | #else |
| 124 | #define RAW_LOG_ERROR(...) google::RawLogStub__(0, __VA_ARGS__) |
| 125 | #endif // STRIP_LOG <= 2 |
| 126 | |
| 127 | #if STRIP_LOG <= 3 |
| 128 | #define RAW_LOG_FATAL(...) google::RawLog__(google::GLOG_FATAL, \ |
| 129 | __FILE__, __LINE__, __VA_ARGS__) |
| 130 | #else |
| 131 | #define RAW_LOG_FATAL(...) \ |
| 132 | do { \ |
| 133 | google::RawLogStub__(0, __VA_ARGS__); \ |
| 134 | exit(1); \ |
| 135 | } while (0) |
| 136 | #endif // STRIP_LOG <= 3 |
| 137 | |
| 138 | // Similar to CHECK(condition) << message, |
| 139 | // but for low-level modules: we use only RAW_LOG that does not allocate memory. |
| 140 | // We do not want to provide args list here to encourage this usage: |
| 141 | // if (!cond) RAW_LOG(FATAL, "foo ...", hard_to_compute_args); |
| 142 | // so that the args are not computed when not needed. |
| 143 | #define RAW_CHECK(condition, message) \ |
| 144 | do { \ |
| 145 | if (!(condition)) { \ |
| 146 | RAW_LOG(FATAL, "Check %s failed: %s", #condition, message); \ |
| 147 | } \ |
| 148 | } while (0) |
| 149 | |
| 150 | // Debug versions of RAW_LOG and RAW_CHECK |
| 151 | #ifndef NDEBUG |
| 152 | |
| 153 | #define RAW_DLOG(severity, ...) RAW_LOG(severity, __VA_ARGS__) |
| 154 | #define RAW_DCHECK(condition, message) RAW_CHECK(condition, message) |
| 155 | |
| 156 | #else // NDEBUG |
| 157 | |
| 158 | #define RAW_DLOG(severity, ...) \ |
| 159 | while (false) \ |
| 160 | RAW_LOG(severity, __VA_ARGS__) |
| 161 | #define RAW_DCHECK(condition, message) \ |
| 162 | while (false) \ |
| 163 | RAW_CHECK(condition, message) |
| 164 | |
| 165 | #endif // NDEBUG |
| 166 | |
| 167 | // Stub log function used to work around for unused variable warnings when |
| 168 | // building with STRIP_LOG > 0. |
| 169 | static inline void RawLogStub__(int /* ignored */, ...) { |
| 170 | } |
| 171 | |
| 172 | // Helper function to implement RAW_LOG and RAW_VLOG |
| 173 | // Logs format... at "severity" level, reporting it |
| 174 | // as called from file:line. |
| 175 | // This does not allocate memory or acquire locks. |
| 176 | GOOGLE_GLOG_DLL_DECL void RawLog__(LogSeverity severity, |
| 177 | const char* file, |
| 178 | int line, |
| 179 | const char* format, ...) |
| 180 | ; |
| 181 | |
| 182 | // Hack to propagate time information into this module so that |
| 183 | // this module does not have to directly call localtime_r(), |
| 184 | // which could allocate memory. |
| 185 | GOOGLE_GLOG_DLL_DECL void RawLog__SetLastTime(const struct tm& t, int usecs); |
| 186 | |
| 187 | } |
| 188 | |
| 189 | #endif // BASE_RAW_LOGGING_H_ |