43 #include <glog/logging.h>
44 #include <glog/raw_logging.h>
48 #define ANNOTATE_BENIGN_RACE(address, description)
53 " Overridable by --vmodule.");
56 " Argument is a comma-separated list of <module name>=<log level>."
57 " <module name> is a glob pattern, matched against the filename base"
58 " (that is, name ignoring .cc/.h./-inl.h)."
59 " <log level> overrides any value given by --v.");
67 const char*
str,
size_t str_len);
74 const char*
str,
size_t str_len) {
78 if (
p == patt_len &&
s == str_len)
return true;
79 if (
p == patt_len)
return false;
80 if (
s == str_len)
return p+1 == patt_len && pattern[
p] ==
'*';
81 if (pattern[
p] ==
str[
s] || pattern[
p] ==
'?') {
86 if (pattern[
p] ==
'*') {
87 if (
p+1 == patt_len)
return true;
93 }
while (
s != str_len);
135 const char* vmodule = FLAGS_vmodule.c_str();
139 while ((sep = strchr(vmodule,
'=')) !=
NULL) {
140 string pattern(vmodule,
static_cast<size_t>(sep - vmodule));
142 if (sscanf(sep,
"=%d", &module_level) == 1) {
154 vmodule = strchr(sep,
',');
155 if (vmodule ==
NULL)
break;
167 int result = FLAGS_v;
168 size_t const pattern_len = strlen(module_pattern);
173 info !=
NULL; info = info->next) {
174 if (info->module_pattern == module_pattern) {
176 result = info->vlog_level;
179 info->vlog_level = log_level;
182 info->module_pattern.size(),
183 module_pattern, pattern_len)) {
184 result = info->vlog_level;
213 RAW_VLOG(1,
"Set VLOG level for \"%s\" to %d", module_pattern, log_level);
220 const char* fname,
int32 verbose_level) {
223 if (!read_vmodule_flag) {
229 int old_errno =
errno;
232 int32* site_flag_value = level_default;
235 const char*
base = strrchr(fname,
'/');
239 base = strrchr(fname,
'\\');
244 const char* base_end = strchr(
base,
'.');
245 size_t base_length = base_end ? size_t(base_end -
base) : strlen(
base);
248 if (base_length >= 4 && (memcmp(
base+base_length-4,
"-inl", 4) == 0)) {
258 info !=
NULL; info = info->next) {
259 if (
SafeFNMatch_(info->module_pattern.c_str(), info->module_pattern.size(),
260 base, base_length)) {
261 site_flag_value = &info->vlog_level;
270 "*site_flag may be written by several threads,"
271 " but the value will be the same");
272 if (read_vmodule_flag) {
273 site_flag->level = site_flag_value;
279 if (site_flag_value == level_default && !site_flag->base_name) {
280 site_flag->base_name =
base;
281 site_flag->base_len = base_length;
290 return *site_flag_value >= verbose_level;
293 _END_GOOGLE_NAMESPACE_