rvargas@google.com | e106ef6 | 2011-03-26 03:48:03 +0900 | [diff] [blame] | 1 | // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
akalin@chromium.org | f0ee79c | 2010-09-30 04:26:36 +0900 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
| 5 | #ifndef BASE_VLOG_H_ |
| 6 | #define BASE_VLOG_H_ |
akalin@chromium.org | f0ee79c | 2010-09-30 04:26:36 +0900 | [diff] [blame] | 7 | |
akalin@chromium.org | f0ee79c | 2010-09-30 04:26:36 +0900 | [diff] [blame] | 8 | #include <string> |
akalin@chromium.org | f0ee79c | 2010-09-30 04:26:36 +0900 | [diff] [blame] | 9 | #include <vector> |
| 10 | |
darin@chromium.org | e585bed | 2011-08-06 00:34:00 +0900 | [diff] [blame] | 11 | #include "base/base_export.h" |
akalin@chromium.org | f0ee79c | 2010-09-30 04:26:36 +0900 | [diff] [blame] | 12 | #include "base/basictypes.h" |
tfarina@chromium.org | b6d4911 | 2013-03-30 23:29:00 +0900 | [diff] [blame] | 13 | #include "base/strings/string_piece.h" |
akalin@chromium.org | f0ee79c | 2010-09-30 04:26:36 +0900 | [diff] [blame] | 14 | |
| 15 | namespace logging { |
| 16 | |
| 17 | // A helper class containing all the settings for vlogging. |
darin@chromium.org | e585bed | 2011-08-06 00:34:00 +0900 | [diff] [blame] | 18 | class BASE_EXPORT VlogInfo { |
akalin@chromium.org | f0ee79c | 2010-09-30 04:26:36 +0900 | [diff] [blame] | 19 | public: |
erg@google.com | 37c078e | 2011-01-11 09:50:59 +0900 | [diff] [blame] | 20 | static const int kDefaultVlogLevel; |
| 21 | |
akalin@chromium.org | f0ee79c | 2010-09-30 04:26:36 +0900 | [diff] [blame] | 22 | // |v_switch| gives the default maximal active V-logging level; 0 is |
| 23 | // the default. Normally positive values are used for V-logging |
| 24 | // levels. |
| 25 | // |
| 26 | // |vmodule_switch| gives the per-module maximal V-logging levels to |
| 27 | // override the value given by |v_switch|. |
| 28 | // E.g. "my_module=2,foo*=3" would change the logging level for all |
| 29 | // code in source files "my_module.*" and "foo*.*" ("-inl" suffixes |
| 30 | // are also disregarded for this matching). |
akalin@chromium.org | 859d7d4 | 2010-10-29 09:39:48 +0900 | [diff] [blame] | 31 | // |
siggi@chromium.org | 25396e1 | 2010-11-05 00:50:49 +0900 | [diff] [blame] | 32 | // |log_severity| points to an int that stores the log level. If a valid |
| 33 | // |v_switch| is provided, it will set the log level, and the default |
| 34 | // vlog severity will be read from there.. |
| 35 | // |
akalin@chromium.org | 859d7d4 | 2010-10-29 09:39:48 +0900 | [diff] [blame] | 36 | // Any pattern containing a forward or backward slash will be tested |
| 37 | // against the whole pathname and not just the module. E.g., |
| 38 | // "*/foo/bar/*=2" would change the logging level for all code in |
| 39 | // source files under a "foo/bar" directory. |
akalin@chromium.org | f0ee79c | 2010-09-30 04:26:36 +0900 | [diff] [blame] | 40 | VlogInfo(const std::string& v_switch, |
siggi@chromium.org | 25396e1 | 2010-11-05 00:50:49 +0900 | [diff] [blame] | 41 | const std::string& vmodule_switch, |
| 42 | int* min_log_level); |
erg@google.com | 0313169 | 2010-10-15 07:03:13 +0900 | [diff] [blame] | 43 | ~VlogInfo(); |
akalin@chromium.org | f0ee79c | 2010-09-30 04:26:36 +0900 | [diff] [blame] | 44 | |
| 45 | // Returns the vlog level for a given file (usually taken from |
| 46 | // __FILE__). |
siggi@chromium.org | 25396e1 | 2010-11-05 00:50:49 +0900 | [diff] [blame] | 47 | int GetVlogLevel(const base::StringPiece& file) const; |
akalin@chromium.org | f0ee79c | 2010-09-30 04:26:36 +0900 | [diff] [blame] | 48 | |
akalin@chromium.org | f0ee79c | 2010-09-30 04:26:36 +0900 | [diff] [blame] | 49 | private: |
siggi@chromium.org | 25396e1 | 2010-11-05 00:50:49 +0900 | [diff] [blame] | 50 | void SetMaxVlogLevel(int level); |
| 51 | int GetMaxVlogLevel() const; |
| 52 | |
akalin@chromium.org | 859d7d4 | 2010-10-29 09:39:48 +0900 | [diff] [blame] | 53 | // VmodulePattern holds all the information for each pattern parsed |
| 54 | // from |vmodule_switch|. |
erg@google.com | 37c078e | 2011-01-11 09:50:59 +0900 | [diff] [blame] | 55 | struct VmodulePattern; |
akalin@chromium.org | f0ee79c | 2010-09-30 04:26:36 +0900 | [diff] [blame] | 56 | std::vector<VmodulePattern> vmodule_levels_; |
siggi@chromium.org | 25396e1 | 2010-11-05 00:50:49 +0900 | [diff] [blame] | 57 | int* min_log_level_; |
akalin@chromium.org | f0ee79c | 2010-09-30 04:26:36 +0900 | [diff] [blame] | 58 | |
| 59 | DISALLOW_COPY_AND_ASSIGN(VlogInfo); |
| 60 | }; |
| 61 | |
akalin@chromium.org | 55a8a81 | 2010-11-02 05:50:55 +0900 | [diff] [blame] | 62 | // Returns true if the string passed in matches the vlog pattern. The |
| 63 | // vlog pattern string can contain wildcards like * and ?. ? matches |
| 64 | // exactly one character while * matches 0 or more characters. Also, |
| 65 | // as a special case, a / or \ character matches either / or \. |
| 66 | // |
| 67 | // Examples: |
| 68 | // "kh?n" matches "khan" but not "khn" or "khaan" |
| 69 | // "kh*n" matches "khn", "khan", or even "khaaaaan" |
| 70 | // "/foo\bar" matches "/foo/bar", "\foo\bar", or "/foo\bar" |
| 71 | // (disregarding C escaping rules) |
darin@chromium.org | e585bed | 2011-08-06 00:34:00 +0900 | [diff] [blame] | 72 | BASE_EXPORT bool MatchVlogPattern(const base::StringPiece& string, |
| 73 | const base::StringPiece& vlog_pattern); |
akalin@chromium.org | 55a8a81 | 2010-11-02 05:50:55 +0900 | [diff] [blame] | 74 | |
akalin@chromium.org | f0ee79c | 2010-09-30 04:26:36 +0900 | [diff] [blame] | 75 | } // namespace logging |
| 76 | |
| 77 | #endif // BASE_VLOG_H_ |