| OLD | NEW |
| 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef BASE_LOGGING_H_ | 5 #ifndef BASE_LOGGING_H_ |
| 6 #define BASE_LOGGING_H_ | 6 #define BASE_LOGGING_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 #include <cstring> | 9 #include <cstring> |
| 10 #include <sstream> | 10 #include <sstream> |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 // Very important: logging a message at the FATAL severity level causes | 94 // Very important: logging a message at the FATAL severity level causes |
| 95 // the program to terminate (after the message is logged). | 95 // the program to terminate (after the message is logged). |
| 96 // | 96 // |
| 97 // Note the special severity of ERROR_REPORT only available/relevant in normal | 97 // Note the special severity of ERROR_REPORT only available/relevant in normal |
| 98 // mode, which displays error dialog without terminating the program. There is | 98 // mode, which displays error dialog without terminating the program. There is |
| 99 // no error dialog for severity ERROR or below in normal mode. | 99 // no error dialog for severity ERROR or below in normal mode. |
| 100 // | 100 // |
| 101 // There is also the special severity of DFATAL, which logs FATAL in | 101 // There is also the special severity of DFATAL, which logs FATAL in |
| 102 // debug mode, ERROR_REPORT in normal mode. | 102 // debug mode, ERROR_REPORT in normal mode. |
| 103 | 103 |
| 104 // XXX better comment -- must be before we use << and in global namespace | |
| 105 // These functions are provided as a convenience for logging, which is where we | |
| 106 // use streams (it is against Google style to use streams in other places). It | |
| 107 // is designed to allow you to emit non-ASCII Unicode strings to the log file, | |
| 108 // which is normally ASCII. It is relatively slow, so try not to use it for | |
| 109 // common cases. Non-ASCII characters will be converted to UTF-8 by these | |
| 110 // operators. | |
| 111 std::ostream& operator<<(std::ostream& out, const wchar_t* wstr); | |
| 112 inline std::ostream& operator<<(std::ostream& out, const std::wstring& wstr) { | |
| 113 return out << wstr.c_str(); | |
| 114 } | |
| 115 | |
| 116 namespace logging { | 104 namespace logging { |
| 117 | 105 |
| 118 // Where to record logging output? A flat file and/or system debug log via | 106 // Where to record logging output? A flat file and/or system debug log via |
| 119 // OutputDebugString. Defaults on Windows to LOG_ONLY_TO_FILE, and on | 107 // OutputDebugString. Defaults on Windows to LOG_ONLY_TO_FILE, and on |
| 120 // POSIX to LOG_ONLY_TO_SYSTEM_DEBUG_LOG (aka stderr). | 108 // POSIX to LOG_ONLY_TO_SYSTEM_DEBUG_LOG (aka stderr). |
| 121 enum LoggingDestination { LOG_NONE, | 109 enum LoggingDestination { LOG_NONE, |
| 122 LOG_ONLY_TO_FILE, | 110 LOG_ONLY_TO_FILE, |
| 123 LOG_ONLY_TO_SYSTEM_DEBUG_LOG, | 111 LOG_ONLY_TO_SYSTEM_DEBUG_LOG, |
| 124 LOG_TO_BOTH_FILE_AND_SYSTEM_DEBUG_LOG }; | 112 LOG_TO_BOTH_FILE_AND_SYSTEM_DEBUG_LOG }; |
| 125 | 113 |
| (...skipping 692 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 818 #define RAW_LOG(level, message) logging::RawLog(logging::LOG_ ## level, message) | 806 #define RAW_LOG(level, message) logging::RawLog(logging::LOG_ ## level, message) |
| 819 | 807 |
| 820 #define RAW_CHECK(condition) \ | 808 #define RAW_CHECK(condition) \ |
| 821 do { \ | 809 do { \ |
| 822 if (!(condition)) \ | 810 if (!(condition)) \ |
| 823 logging::RawLog(logging::LOG_FATAL, "Check failed: " #condition "\n"); \ | 811 logging::RawLog(logging::LOG_FATAL, "Check failed: " #condition "\n"); \ |
| 824 } while (0) | 812 } while (0) |
| 825 | 813 |
| 826 } // namespace logging | 814 } // namespace logging |
| 827 | 815 |
| 816 // These functions are provided as a convenience for logging, which is where we |
| 817 // use streams (it is against Google style to use streams in other places). It |
| 818 // is designed to allow you to emit non-ASCII Unicode strings to the log file, |
| 819 // which is normally ASCII. It is relatively slow, so try not to use it for |
| 820 // common cases. Non-ASCII characters will be converted to UTF-8 by these |
| 821 // operators. |
| 822 std::ostream& operator<<(std::ostream& out, const wchar_t* wstr); |
| 823 inline std::ostream& operator<<(std::ostream& out, const std::wstring& wstr) { |
| 824 return out << wstr.c_str(); |
| 825 } |
| 826 |
| 828 // The NOTIMPLEMENTED() macro annotates codepaths which have | 827 // The NOTIMPLEMENTED() macro annotates codepaths which have |
| 829 // not been implemented yet. | 828 // not been implemented yet. |
| 830 // | 829 // |
| 831 // The implementation of this macro is controlled by NOTIMPLEMENTED_POLICY: | 830 // The implementation of this macro is controlled by NOTIMPLEMENTED_POLICY: |
| 832 // 0 -- Do nothing (stripped by compiler) | 831 // 0 -- Do nothing (stripped by compiler) |
| 833 // 1 -- Warn at compile time | 832 // 1 -- Warn at compile time |
| 834 // 2 -- Fail at compile time | 833 // 2 -- Fail at compile time |
| 835 // 3 -- Fail at runtime (DCHECK) | 834 // 3 -- Fail at runtime (DCHECK) |
| 836 // 4 -- [default] LOG(ERROR) at runtime | 835 // 4 -- [default] LOG(ERROR) at runtime |
| 837 // 5 -- LOG(ERROR) at runtime, only once per call-site | 836 // 5 -- LOG(ERROR) at runtime, only once per call-site |
| (...skipping 23 matching lines...) Expand all Loading... |
| 861 #elif NOTIMPLEMENTED_POLICY == 4 | 860 #elif NOTIMPLEMENTED_POLICY == 4 |
| 862 #define NOTIMPLEMENTED() LOG(ERROR) << NOTIMPLEMENTED_MSG | 861 #define NOTIMPLEMENTED() LOG(ERROR) << NOTIMPLEMENTED_MSG |
| 863 #elif NOTIMPLEMENTED_POLICY == 5 | 862 #elif NOTIMPLEMENTED_POLICY == 5 |
| 864 #define NOTIMPLEMENTED() do {\ | 863 #define NOTIMPLEMENTED() do {\ |
| 865 static int count = 0;\ | 864 static int count = 0;\ |
| 866 LOG_IF(ERROR, 0 == count++) << NOTIMPLEMENTED_MSG;\ | 865 LOG_IF(ERROR, 0 == count++) << NOTIMPLEMENTED_MSG;\ |
| 867 } while(0) | 866 } while(0) |
| 868 #endif | 867 #endif |
| 869 | 868 |
| 870 #endif // BASE_LOGGING_H_ | 869 #endif // BASE_LOGGING_H_ |
| OLD | NEW |