| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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_VLOG_H_ | 5 #ifndef BASE_VLOG_H_ |
| 6 #define BASE_VLOG_H_ | 6 #define BASE_VLOG_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include <cstddef> | 9 #include <cstddef> |
| 10 #include <string> | 10 #include <string> |
| 11 #include <vector> | 11 #include <vector> |
| 12 | 12 |
| 13 #include "base/basictypes.h" | 13 #include "base/basictypes.h" |
| 14 #include "base/string_piece.h" | 14 #include "base/string_piece.h" |
| 15 | 15 |
| 16 namespace logging { | 16 namespace logging { |
| 17 | 17 |
| 18 // A helper class containing all the settings for vlogging. | 18 // A helper class containing all the settings for vlogging. |
| 19 class VlogInfo { | 19 class VlogInfo { |
| 20 public: | 20 public: |
| 21 static const int kDefaultVlogLevel; |
| 22 |
| 21 // |v_switch| gives the default maximal active V-logging level; 0 is | 23 // |v_switch| gives the default maximal active V-logging level; 0 is |
| 22 // the default. Normally positive values are used for V-logging | 24 // the default. Normally positive values are used for V-logging |
| 23 // levels. | 25 // levels. |
| 24 // | 26 // |
| 25 // |vmodule_switch| gives the per-module maximal V-logging levels to | 27 // |vmodule_switch| gives the per-module maximal V-logging levels to |
| 26 // override the value given by |v_switch|. | 28 // override the value given by |v_switch|. |
| 27 // E.g. "my_module=2,foo*=3" would change the logging level for all | 29 // E.g. "my_module=2,foo*=3" would change the logging level for all |
| 28 // code in source files "my_module.*" and "foo*.*" ("-inl" suffixes | 30 // code in source files "my_module.*" and "foo*.*" ("-inl" suffixes |
| 29 // are also disregarded for this matching). | 31 // are also disregarded for this matching). |
| 30 // | 32 // |
| 31 // |log_severity| points to an int that stores the log level. If a valid | 33 // |log_severity| points to an int that stores the log level. If a valid |
| 32 // |v_switch| is provided, it will set the log level, and the default | 34 // |v_switch| is provided, it will set the log level, and the default |
| 33 // vlog severity will be read from there.. | 35 // vlog severity will be read from there.. |
| 34 // | 36 // |
| 35 // Any pattern containing a forward or backward slash will be tested | 37 // Any pattern containing a forward or backward slash will be tested |
| 36 // against the whole pathname and not just the module. E.g., | 38 // against the whole pathname and not just the module. E.g., |
| 37 // "*/foo/bar/*=2" would change the logging level for all code in | 39 // "*/foo/bar/*=2" would change the logging level for all code in |
| 38 // source files under a "foo/bar" directory. | 40 // source files under a "foo/bar" directory. |
| 39 VlogInfo(const std::string& v_switch, | 41 VlogInfo(const std::string& v_switch, |
| 40 const std::string& vmodule_switch, | 42 const std::string& vmodule_switch, |
| 41 int* min_log_level); | 43 int* min_log_level); |
| 42 ~VlogInfo(); | 44 ~VlogInfo(); |
| 43 | 45 |
| 44 // Returns the vlog level for a given file (usually taken from | 46 // Returns the vlog level for a given file (usually taken from |
| 45 // __FILE__). | 47 // __FILE__). |
| 46 int GetVlogLevel(const base::StringPiece& file) const; | 48 int GetVlogLevel(const base::StringPiece& file) const; |
| 47 | 49 |
| 48 static const int kDefaultVlogLevel; | |
| 49 | |
| 50 private: | 50 private: |
| 51 void SetMaxVlogLevel(int level); | 51 void SetMaxVlogLevel(int level); |
| 52 int GetMaxVlogLevel() const; | 52 int GetMaxVlogLevel() const; |
| 53 | 53 |
| 54 // VmodulePattern holds all the information for each pattern parsed | 54 // VmodulePattern holds all the information for each pattern parsed |
| 55 // from |vmodule_switch|. | 55 // from |vmodule_switch|. |
| 56 struct VmodulePattern { | 56 struct VmodulePattern; |
| 57 enum MatchTarget { MATCH_MODULE, MATCH_FILE }; | |
| 58 | |
| 59 explicit VmodulePattern(const std::string& pattern); | |
| 60 | |
| 61 VmodulePattern(); | |
| 62 | |
| 63 std::string pattern; | |
| 64 int vlog_level; | |
| 65 MatchTarget match_target; | |
| 66 }; | |
| 67 | |
| 68 std::vector<VmodulePattern> vmodule_levels_; | 57 std::vector<VmodulePattern> vmodule_levels_; |
| 69 int* min_log_level_; | 58 int* min_log_level_; |
| 70 | 59 |
| 71 DISALLOW_COPY_AND_ASSIGN(VlogInfo); | 60 DISALLOW_COPY_AND_ASSIGN(VlogInfo); |
| 72 }; | 61 }; |
| 73 | 62 |
| 74 // Returns true if the string passed in matches the vlog pattern. The | 63 // Returns true if the string passed in matches the vlog pattern. The |
| 75 // vlog pattern string can contain wildcards like * and ?. ? matches | 64 // vlog pattern string can contain wildcards like * and ?. ? matches |
| 76 // exactly one character while * matches 0 or more characters. Also, | 65 // exactly one character while * matches 0 or more characters. Also, |
| 77 // as a special case, a / or \ character matches either / or \. | 66 // as a special case, a / or \ character matches either / or \. |
| 78 // | 67 // |
| 79 // Examples: | 68 // Examples: |
| 80 // "kh?n" matches "khan" but not "khn" or "khaan" | 69 // "kh?n" matches "khan" but not "khn" or "khaan" |
| 81 // "kh*n" matches "khn", "khan", or even "khaaaaan" | 70 // "kh*n" matches "khn", "khan", or even "khaaaaan" |
| 82 // "/foo\bar" matches "/foo/bar", "\foo\bar", or "/foo\bar" | 71 // "/foo\bar" matches "/foo/bar", "\foo\bar", or "/foo\bar" |
| 83 // (disregarding C escaping rules) | 72 // (disregarding C escaping rules) |
| 84 bool MatchVlogPattern(const base::StringPiece& string, | 73 bool MatchVlogPattern(const base::StringPiece& string, |
| 85 const base::StringPiece& vlog_pattern); | 74 const base::StringPiece& vlog_pattern); |
| 86 | 75 |
| 87 } // namespace logging | 76 } // namespace logging |
| 88 | 77 |
| 89 #endif // BASE_VLOG_H_ | 78 #endif // BASE_VLOG_H_ |
| OLD | NEW |