| 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_ |