#include "babeltrace-cfg-cli-args-default.h"
#define ENV_BABELTRACE_WARN_COMMAND_NAME_DIRECTORY_CLASH "BABELTRACE_CLI_WARN_COMMAND_NAME_DIRECTORY_CLASH"
+#define ENV_BABELTRACE_CLI_LOG_LEVEL "BABELTRACE_CLI_LOG_LEVEL"
+
+/*
+ * Known environment variable names for the log levels of the project's
+ * modules.
+ */
+static const char* log_level_env_var_names[] = {
+ "BABELTRACE_COMMON_LOG_LEVEL",
+ "BABELTRACE_PLUGIN_CTF_BTR_LOG_LEVEL",
+ "BABELTRACE_PLUGIN_CTF_FS_SRC_LOG_LEVEL",
+ "BABELTRACE_PLUGIN_CTF_LTTNG_LIVE_SRC_LOG_LEVEL",
+ "BABELTRACE_PLUGIN_CTF_METADATA_LOG_LEVEL",
+ "BABELTRACE_PLUGIN_CTF_NOTIF_ITER_LOG_LEVEL",
+ "BABELTRACE_PLUGIN_LTTNG_UTILS_DEBUG_INFO_FLT_LOG_LEVEL",
+ "BABELTRACE_PLUGIN_UTILS_TRIMMER_FLT_LOG_LEVEL",
+ "BABELTRACE_PYTHON_PLUGIN_PROVIDER_LOG_LEVEL",
+ NULL,
+};
/* Application's processing graph (weak) */
static struct bt_graph *the_graph;
static
void init_log_level(void)
{
- bt_cli_log_level = bt_log_get_level_from_env("BABELTRACE_CLI_LOG_LEVEL");
+ bt_cli_log_level = bt_log_get_level_from_env(ENV_BABELTRACE_CLI_LOG_LEVEL);
+}
+
+static
+void set_auto_log_levels(struct bt_config *cfg)
+{
+ const char **env_var_name;
+
+ /*
+ * Override the configuration's default log level if
+ * BABELTRACE_VERBOSE or BABELTRACE_DEBUG environment variables
+ * are found for backward compatibility with legacy Babetrace 1.
+ */
+ if (getenv("BABELTRACE_DEBUG") &&
+ strcmp(getenv("BABELTRACE_DEBUG"), "1") == 0) {
+ cfg->log_level = 'V';
+ } else if (getenv("BABELTRACE_VERBOSE") &&
+ strcmp(getenv("BABELTRACE_VERBOSE"), "1") == 0) {
+ cfg->log_level = 'I';
+ }
+
+ /*
+ * Set log levels according to --debug or --verbose. For
+ * backward compatibility, --debug is more verbose than
+ * --verbose. So:
+ *
+ * --verbose: INFO log level
+ * --debug: VERBOSE log level (includes DEBUG, which is
+ * is less verbose than VERBOSE in the internal
+ * logging framework)
+ */
+ if (!getenv("BABELTRACE_LOGGING_GLOBAL_LEVEL")) {
+ if (cfg->verbose) {
+ bt_logging_set_global_level(BT_LOGGING_LEVEL_INFO);
+ } else if (cfg->debug) {
+ bt_logging_set_global_level(BT_LOGGING_LEVEL_VERBOSE);
+ } else {
+ /*
+ * Set library's default log level if not
+ * explicitly specified.
+ */
+ switch (cfg->log_level) {
+ case 'N':
+ bt_logging_set_global_level(BT_LOGGING_LEVEL_NONE);
+ break;
+ case 'V':
+ bt_logging_set_global_level(BT_LOGGING_LEVEL_VERBOSE);
+ break;
+ case 'D':
+ bt_logging_set_global_level(BT_LOGGING_LEVEL_DEBUG);
+ break;
+ case 'I':
+ bt_logging_set_global_level(BT_LOGGING_LEVEL_INFO);
+ break;
+ case 'W':
+ bt_logging_set_global_level(BT_LOGGING_LEVEL_WARN);
+ break;
+ case 'E':
+ bt_logging_set_global_level(BT_LOGGING_LEVEL_ERROR);
+ break;
+ case 'F':
+ bt_logging_set_global_level(BT_LOGGING_LEVEL_FATAL);
+ break;
+ default:
+ abort();
+ }
+ }
+ }
+
+ if (!getenv(ENV_BABELTRACE_CLI_LOG_LEVEL)) {
+ if (cfg->verbose) {
+ bt_cli_log_level = BT_LOG_INFO;
+ } else if (cfg->debug) {
+ bt_cli_log_level = BT_LOG_VERBOSE;
+ } else {
+ /*
+ * Set CLI's default log level if not explicitly
+ * specified.
+ */
+ switch (cfg->log_level) {
+ case 'N':
+ bt_cli_log_level = BT_LOG_NONE;
+ break;
+ case 'V':
+ bt_cli_log_level = BT_LOG_VERBOSE;
+ break;
+ case 'D':
+ bt_cli_log_level = BT_LOG_DEBUG;
+ break;
+ case 'I':
+ bt_cli_log_level = BT_LOG_INFO;
+ break;
+ case 'W':
+ bt_cli_log_level = BT_LOG_WARN;
+ break;
+ case 'E':
+ bt_cli_log_level = BT_LOG_ERROR;
+ break;
+ case 'F':
+ bt_cli_log_level = BT_LOG_FATAL;
+ break;
+ default:
+ abort();
+ }
+ }
+ }
+
+ env_var_name = log_level_env_var_names;
+
+ while (*env_var_name) {
+ if (!getenv(*env_var_name)) {
+ if (cfg->verbose) {
+ setenv(*env_var_name, "I", 1);
+ } else if (cfg->debug) {
+ setenv(*env_var_name, "V", 1);
+ } else {
+ char val[2] = { 0 };
+
+ /*
+ * Set module's default log level if not
+ * explicitly specified.
+ */
+ val[0] = cfg->log_level;
+ setenv(*env_var_name, val, 1);
+ }
+ }
+
+ env_var_name++;
+ }
}
+static
void set_sigint_handler(void)
{
struct sigaction new_action, old_action;
goto end;
}
- if (cfg->verbose) {
- bt_cli_log_level = BT_LOGGING_LEVEL_VERBOSE;
- bt_logging_set_global_level(BT_LOGGING_LEVEL_VERBOSE);
- // TODO: for backward compat., set the log level
- // environment variables of the known plugins
- // to VERBOSE
- } else if (cfg->debug) {
- bt_cli_log_level = BT_LOGGING_LEVEL_DEBUG;
- bt_logging_set_global_level(BT_LOGGING_LEVEL_DEBUG);
- // TODO: for backward compat., set the log level
- // environment variables of the known plugins
- // to DEBUG
- }
-
- babeltrace_debug = cfg->debug;
- babeltrace_verbose = cfg->verbose;
+ set_auto_log_levels(cfg);
print_cfg(cfg);
if (cfg->command_needs_plugins) {