mirror of
https://github.com/facebook/sapling.git
synced 2024-10-05 14:28:17 +03:00
mononoke: add --logview-additional-level-filter
Summary: While debugging T94402830 I noticed that logview category was using quite a lot of scribe quota, however we don't really use it much. The reason it was using a lot of scribe quota is because we were logging all stderr messages to logview, even "DEBUG" ones. That might also be the reason why we didn't use logview - it was too spammy. Let's make it possible to add an additional log level filter for logview, so that we could log only e.g. warn log messages and above. Reviewed By: Croohand Differential Revision: D29456888 fbshipit-source-id: 8cc66773ca8d82b00c3337937f519f6140fc8c9d
This commit is contained in:
parent
a55ae93401
commit
9e98685fff
@ -79,6 +79,8 @@ pub const WITH_READONLY_STORAGE_ARG: &str = "with-readonly-storage";
|
||||
|
||||
pub const LOG_INCLUDE_TAG: &str = "log-include-tag";
|
||||
pub const LOG_EXCLUDE_TAG: &str = "log-exclude-tag";
|
||||
pub const LOGVIEW_CATEGORY: &str = "logview-category";
|
||||
pub const LOGVIEW_ADDITIONAL_LEVEL_FILTER: &str = "logview-additional-level-filter";
|
||||
// Argument, responsible for instantiation of `ObservabilityContext::Dynamic`
|
||||
pub const WITH_DYNAMIC_OBSERVABILITY: &str = "with-dynamic-observability";
|
||||
|
||||
@ -839,11 +841,21 @@ fn add_logger_args<'a, 'b>(app: App<'a, 'b>) -> App<'a, 'b> {
|
||||
.help("fate of the process when a panic happens"),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("logview-category")
|
||||
.long("logview-category")
|
||||
Arg::with_name(LOGVIEW_CATEGORY)
|
||||
.long(LOGVIEW_CATEGORY)
|
||||
.takes_value(true)
|
||||
.help("logview category to log to. Logview is not used if not set"),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name(LOGVIEW_ADDITIONAL_LEVEL_FILTER)
|
||||
.long(LOGVIEW_ADDITIONAL_LEVEL_FILTER)
|
||||
.takes_value(true)
|
||||
.possible_values(&slog::LOG_LEVEL_NAMES)
|
||||
.requires(LOGVIEW_CATEGORY)
|
||||
.help("logview level to filter. If logview category is not set then this is ignored. \
|
||||
Note that this level is applied AFTER --log-level/--debug was applied, so it doesn't make sense to set this parameter to a lower level \
|
||||
than --log-level"),
|
||||
)
|
||||
.arg(
|
||||
Arg::with_name("debug")
|
||||
.short("d")
|
||||
@ -855,7 +867,7 @@ fn add_logger_args<'a, 'b>(app: App<'a, 'b>) -> App<'a, 'b> {
|
||||
.long("log-level")
|
||||
.help("log level to use (does not work with --debug)")
|
||||
.takes_value(true)
|
||||
.possible_values(&["CRITICAL", "ERROR", "WARN", "INFO", "DEBUG", "TRACE"])
|
||||
.possible_values(&slog::LOG_LEVEL_NAMES)
|
||||
.conflicts_with("debug"),
|
||||
)
|
||||
.arg(
|
||||
|
@ -52,11 +52,12 @@ use super::{
|
||||
BLOBSTORE_SCRUB_ACTION_ARG, BLOBSTORE_SCRUB_GRACE_ARG,
|
||||
BLOBSTORE_SCRUB_QUEUE_PEEK_BOUND_ARG, BLOBSTORE_SCRUB_WRITE_MOSTLY_MISSING_ARG,
|
||||
CACHELIB_ATTEMPT_ZSTD_ARG, CRYPTO_PATH_REGEX_ARG, DISABLE_TUNABLES, ENABLE_MCROUTER,
|
||||
LOCAL_CONFIGERATOR_PATH_ARG, LOG_EXCLUDE_TAG, LOG_INCLUDE_TAG, MANIFOLD_API_KEY_ARG,
|
||||
MANIFOLD_THRIFT_OPS_ARG, MANIFOLD_WEAK_CONSISTENCY_MS_ARG, MYSQL_CONN_OPEN_TIMEOUT,
|
||||
MYSQL_MASTER_ONLY, MYSQL_MAX_QUERY_TIME, MYSQL_POOL_AGE_TIMEOUT, MYSQL_POOL_IDLE_TIMEOUT,
|
||||
MYSQL_POOL_LIMIT, MYSQL_POOL_PER_KEY_LIMIT, MYSQL_POOL_THREADS_NUM,
|
||||
MYSQL_SQLBLOB_POOL_AGE_TIMEOUT, MYSQL_SQLBLOB_POOL_IDLE_TIMEOUT, MYSQL_SQLBLOB_POOL_LIMIT,
|
||||
LOCAL_CONFIGERATOR_PATH_ARG, LOGVIEW_ADDITIONAL_LEVEL_FILTER, LOGVIEW_CATEGORY,
|
||||
LOG_EXCLUDE_TAG, LOG_INCLUDE_TAG, MANIFOLD_API_KEY_ARG, MANIFOLD_THRIFT_OPS_ARG,
|
||||
MANIFOLD_WEAK_CONSISTENCY_MS_ARG, MYSQL_CONN_OPEN_TIMEOUT, MYSQL_MASTER_ONLY,
|
||||
MYSQL_MAX_QUERY_TIME, MYSQL_POOL_AGE_TIMEOUT, MYSQL_POOL_IDLE_TIMEOUT, MYSQL_POOL_LIMIT,
|
||||
MYSQL_POOL_PER_KEY_LIMIT, MYSQL_POOL_THREADS_NUM, MYSQL_SQLBLOB_POOL_AGE_TIMEOUT,
|
||||
MYSQL_SQLBLOB_POOL_IDLE_TIMEOUT, MYSQL_SQLBLOB_POOL_LIMIT,
|
||||
MYSQL_SQLBLOB_POOL_PER_KEY_LIMIT, MYSQL_SQLBLOB_POOL_THREADS_NUM, READ_BURST_BYTES_ARG,
|
||||
READ_BYTES_ARG, READ_CHAOS_ARG, READ_QPS_ARG, RENDEZVOUS_FREE_CONNECTIONS, RUNTIME_THREADS,
|
||||
TUNABLES_CONFIG, WITH_DYNAMIC_OBSERVABILITY, WITH_READONLY_STORAGE_ARG,
|
||||
@ -285,7 +286,7 @@ fn create_root_log_drain(
|
||||
)?;
|
||||
|
||||
let root_log_drain: Arc<dyn SendSyncRefUnwindSafeDrain<Ok = (), Err = Never>> = match matches
|
||||
.value_of("logview-category")
|
||||
.value_of(LOGVIEW_CATEGORY)
|
||||
{
|
||||
Some(category) => {
|
||||
#[cfg(fbcode_build)]
|
||||
@ -293,14 +294,30 @@ fn create_root_log_drain(
|
||||
// Sometimes scribe writes can fail due to backpressure - it's OK to drop these
|
||||
// since logview is sampled anyway.
|
||||
let logview_drain = ::slog_logview::LogViewDrain::new(fb, category).ignore_res();
|
||||
let drain = slog::Duplicate::new(glog_drain, logview_drain);
|
||||
Arc::new(drain.ignore_res())
|
||||
match matches.value_of(LOGVIEW_ADDITIONAL_LEVEL_FILTER) {
|
||||
Some(log_level_str) => {
|
||||
let logview_level = Level::from_str(log_level_str)
|
||||
.map_err(|_| format_err!("Unknown log level: {}", log_level_str))?;
|
||||
|
||||
let drain = slog::Duplicate::new(
|
||||
glog_drain,
|
||||
logview_drain.filter_level(logview_level).ignore_res(),
|
||||
);
|
||||
Arc::new(drain.ignore_res())
|
||||
}
|
||||
None => {
|
||||
let drain = slog::Duplicate::new(glog_drain, logview_drain);
|
||||
Arc::new(drain.ignore_res())
|
||||
}
|
||||
}
|
||||
}
|
||||
#[cfg(not(fbcode_build))]
|
||||
{
|
||||
let _unused = LOGVIEW_ADDITIONAL_LEVEL_FILTER;
|
||||
let _ = (fb, category);
|
||||
unimplemented!(
|
||||
"Passed --logview-category, but it is supported only for fbcode builds"
|
||||
"Passed --{}, but it is supported only for fbcode builds",
|
||||
LOGVIEW_CATEGORY
|
||||
)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user