159 lines
6.4 KiB
C++
159 lines
6.4 KiB
C++
// Copyright (c) 2024, Google Inc.
|
|
// All rights reserved.
|
|
//
|
|
// Redistribution and use in source and binary forms, with or without
|
|
// modification, are permitted provided that the following conditions are
|
|
// met:
|
|
//
|
|
// * Redistributions of source code must retain the above copyright
|
|
// notice, this list of conditions and the following disclaimer.
|
|
// * Redistributions in binary form must reproduce the above
|
|
// copyright notice, this list of conditions and the following disclaimer
|
|
// in the documentation and/or other materials provided with the
|
|
// distribution.
|
|
// * Neither the name of Google Inc. nor the names of its
|
|
// contributors may be used to endorse or promote products derived from
|
|
// this software without specific prior written permission.
|
|
//
|
|
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
|
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
|
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
|
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
//
|
|
|
|
#include "glog/flags.h"
|
|
|
|
#include <cstdlib>
|
|
#include <cstring>
|
|
|
|
#include "base/commandlineflags.h"
|
|
#include "glog/log_severity.h"
|
|
|
|
namespace {
|
|
|
|
// Compute the default value for --log_dir
|
|
static const char* DefaultLogDir() {
|
|
constexpr const char* const names[]{"GOOGLE_LOG_DIR", "TEST_TMPDIR"};
|
|
for (const char* const name : names) {
|
|
const char* const env = std::getenv(name);
|
|
if (env != nullptr && env[0] != '\0') {
|
|
return env;
|
|
}
|
|
}
|
|
return "";
|
|
}
|
|
|
|
bool BoolFromEnv(const char* varname, bool defval) {
|
|
const char* const valstr = getenv(varname);
|
|
if (!valstr) {
|
|
return defval;
|
|
}
|
|
return std::memchr("tTyY1\0", valstr[0], 6) != nullptr;
|
|
}
|
|
|
|
} // namespace
|
|
|
|
GLOG_DEFINE_bool(timestamp_in_logfile_name,
|
|
BoolFromEnv("GOOGLE_TIMESTAMP_IN_LOGFILE_NAME", true),
|
|
"put a timestamp at the end of the log file name");
|
|
GLOG_DEFINE_bool(logtostderr, BoolFromEnv("GOOGLE_LOGTOSTDERR", false),
|
|
"log messages go to stderr instead of logfiles");
|
|
GLOG_DEFINE_bool(alsologtostderr, BoolFromEnv("GOOGLE_ALSOLOGTOSTDERR", false),
|
|
"log messages go to stderr in addition to logfiles");
|
|
GLOG_DEFINE_bool(colorlogtostderr, false,
|
|
"color messages logged to stderr (if supported by terminal)");
|
|
GLOG_DEFINE_bool(colorlogtostdout, false,
|
|
"color messages logged to stdout (if supported by terminal)");
|
|
GLOG_DEFINE_bool(logtostdout, BoolFromEnv("GOOGLE_LOGTOSTDOUT", false),
|
|
"log messages go to stdout instead of logfiles");
|
|
#ifdef GLOG_OS_LINUX
|
|
GLOG_DEFINE_bool(
|
|
drop_log_memory, true,
|
|
"Drop in-memory buffers of log contents. "
|
|
"Logs can grow very quickly and they are rarely read before they "
|
|
"need to be evicted from memory. Instead, drop them from memory "
|
|
"as soon as they are flushed to disk.");
|
|
#endif
|
|
|
|
// By default, errors (including fatal errors) get logged to stderr as
|
|
// well as the file.
|
|
//
|
|
// The default is ERROR instead of FATAL so that users can see problems
|
|
// when they run a program without having to look in another file.
|
|
GLOG_DEFINE_int32(
|
|
stderrthreshold, google::GLOG_ERROR,
|
|
"log messages at or above this level are copied to stderr in "
|
|
"addition to logfiles. This flag obsoletes --alsologtostderr.");
|
|
|
|
GLOG_DEFINE_string(alsologtoemail, "",
|
|
"log messages go to these email addresses "
|
|
"in addition to logfiles");
|
|
GLOG_DEFINE_bool(log_file_header, true,
|
|
"Write the file header at the start of each log file");
|
|
GLOG_DEFINE_bool(log_prefix, true,
|
|
"Prepend the log prefix to the start of each log line");
|
|
GLOG_DEFINE_bool(log_year_in_prefix, true,
|
|
"Include the year in the log prefix");
|
|
GLOG_DEFINE_int32(minloglevel, 0,
|
|
"Messages logged at a lower level than this don't "
|
|
"actually get logged anywhere");
|
|
GLOG_DEFINE_int32(logbuflevel, 0,
|
|
"Buffer log messages logged at this level or lower"
|
|
" (-1 means don't buffer; 0 means buffer INFO only;"
|
|
" ...)");
|
|
GLOG_DEFINE_int32(logbufsecs, 30,
|
|
"Buffer log messages for at most this many seconds");
|
|
|
|
GLOG_DEFINE_int32(logcleansecs, 60 * 5, // every 5 minutes
|
|
"Clean overdue logs every this many seconds");
|
|
|
|
GLOG_DEFINE_int32(logemaillevel, 999,
|
|
"Email log messages logged at this level or higher"
|
|
" (0 means email all; 3 means email FATAL only;"
|
|
" ...)");
|
|
GLOG_DEFINE_string(logmailer, "", "Mailer used to send logging email");
|
|
|
|
GLOG_DEFINE_int32(logfile_mode, 0664, "Log file mode/permissions.");
|
|
|
|
GLOG_DEFINE_string(
|
|
log_dir, DefaultLogDir(),
|
|
"If specified, logfiles are written into this directory instead "
|
|
"of the default logging directory.");
|
|
GLOG_DEFINE_string(log_link, "",
|
|
"Put additional links to the log "
|
|
"files in this directory");
|
|
|
|
GLOG_DEFINE_uint32(max_log_size, 1800,
|
|
"approx. maximum log file size (in MB). A value of 0 will "
|
|
"be silently overridden to 1.");
|
|
|
|
GLOG_DEFINE_bool(stop_logging_if_full_disk, false,
|
|
"Stop attempting to log to disk if the disk is full.");
|
|
|
|
GLOG_DEFINE_string(log_backtrace_at, "",
|
|
"Emit a backtrace when logging at file:linenum.");
|
|
|
|
GLOG_DEFINE_bool(log_utc_time, false, "Use UTC time for logging.");
|
|
|
|
GLOG_DEFINE_int32(v, 0,
|
|
"Show all VLOG(m) messages for m <= this."
|
|
" Overridable by --vmodule.");
|
|
|
|
GLOG_DEFINE_string(
|
|
vmodule, "",
|
|
"per-module verbose level."
|
|
" Argument is a comma-separated list of <module name>=<log level>."
|
|
" <module name> is a glob pattern, matched against the filename base"
|
|
" (that is, name ignoring .cc/.h./-inl.h)."
|
|
" <log level> overrides any value given by --v.");
|
|
|
|
GLOG_DEFINE_bool(symbolize_stacktrace, true,
|
|
"Symbolize the stack trace in the tombstone");
|