Browse Source

add verbosity level -2

Signed-off-by: Soumik Dutta <shalearkane@gmail.com>
Soumik Dutta 2 years ago
parent
commit
f512d1e460

+ 8 - 8
borgmatic/commands/arguments.py

@@ -152,30 +152,30 @@ def make_parsers():
         '-v',
         '--verbosity',
         type=int,
-        choices=range(-1, 3),
+        choices=range(-2, 3),
         default=0,
-        help='Display verbose progress to the console (from only errors to very verbose: -1, 0, 1, or 2)',
+        help='Display verbose progress to the console (from disabled, errors to very verbose: -2, -1, 0, 1, or 2)',
     )
     global_group.add_argument(
         '--syslog-verbosity',
         type=int,
-        choices=range(-1, 3),
+        choices=range(-2, 3),
         default=0,
-        help='Log verbose progress to syslog (from only errors to very verbose: -1, 0, 1, or 2). Ignored when console is interactive or --log-file is given',
+        help='Log verbose progress to syslog (from disabled, errors to very verbose: -2, -1, 0, 1, or 2). Ignored when console is interactive or --log-file is given',
     )
     global_group.add_argument(
         '--log-file-verbosity',
         type=int,
-        choices=range(-1, 3),
+        choices=range(-2, 3),
         default=0,
-        help='Log verbose progress to log file (from only errors to very verbose: -1, 0, 1, or 2). Only used when --log-file is given',
+        help='Log verbose progress to log file (from disabled, errors to very verbose: -2, -1, 0, 1, or 2). Only used when --log-file is given',
     )
     global_group.add_argument(
         '--monitoring-verbosity',
         type=int,
-        choices=range(-1, 3),
+        choices=range(-2, 3),
         default=0,
-        help='Log verbose progress to monitoring integrations that support logging (from only errors to very verbose: -1, 0, 1, or 2)',
+        help='Log verbose progress to monitoring integrations that support logging (from disabled, errors to very verbose: -2, -1, 0, 1, or 2)',
     )
     global_group.add_argument(
         '--log-file',

+ 6 - 2
borgmatic/logger.py

@@ -141,6 +141,7 @@ def add_logging_level(level_name, level_number):
 
 
 ANSWER = logging.WARN - 5
+DISABLED = logging.DEBUG - 5
 
 
 def add_custom_log_levels():  # pragma: no cover
@@ -148,6 +149,7 @@ def add_custom_log_levels():  # pragma: no cover
     Add a custom log level between WARN and INFO for user-requested answers.
     '''
     add_logging_level('ANSWER', ANSWER)
+    add_logging_level('DISABLED', DISABLED)
 
 
 def configure_logging(
@@ -175,10 +177,12 @@ def configure_logging(
 
     # Log certain log levels to console stderr and others to stdout. This supports use cases like
     # grepping (non-error) output.
+    console_disabled = logging.NullHandler()
     console_error_handler = logging.StreamHandler(sys.stderr)
     console_standard_handler = logging.StreamHandler(sys.stdout)
     console_handler = Multi_stream_handler(
         {
+            logging.DISABLED: console_disabled,
             logging.CRITICAL: console_error_handler,
             logging.ERROR: console_error_handler,
             logging.WARN: console_error_handler,
@@ -191,7 +195,7 @@ def configure_logging(
     console_handler.setLevel(console_log_level)
 
     syslog_path = None
-    if log_file is None:
+    if log_file is None and syslog_log_level != logging.DISABLED:
         if os.path.exists('/dev/log'):
             syslog_path = '/dev/log'
         elif os.path.exists('/var/run/syslog'):
@@ -206,7 +210,7 @@ def configure_logging(
         )
         syslog_handler.setLevel(syslog_log_level)
         handlers = (console_handler, syslog_handler)
-    elif log_file:
+    elif log_file and log_file_log_level != logging.DISABLED:
         file_handler = logging.handlers.WatchedFileHandler(log_file)
         file_handler.setFormatter(
             logging.Formatter(

+ 2 - 0
borgmatic/verbosity.py

@@ -2,6 +2,7 @@ import logging
 
 import borgmatic.logger
 
+VERBOSITY_DISABLED = -2
 VERBOSITY_ERROR = -1
 VERBOSITY_ANSWER = 0
 VERBOSITY_SOME = 1
@@ -15,6 +16,7 @@ def verbosity_to_log_level(verbosity):
     borgmatic.logger.add_custom_log_levels()
 
     return {
+        VERBOSITY_DISABLED: logging.DISABLED,
         VERBOSITY_ERROR: logging.ERROR,
         VERBOSITY_ANSWER: logging.ANSWER,
         VERBOSITY_SOME: logging.INFO,

+ 1 - 1
sample/systemd/borgmatic.service

@@ -61,4 +61,4 @@ LogRateLimitIntervalSec=0
 # Delay start to prevent backups running during boot. Note that systemd-inhibit requires dbus and
 # dbus-user-session to be installed.
 ExecStartPre=sleep 1m
-ExecStart=systemd-inhibit --who="borgmatic" --what="sleep:shutdown" --why="Prevent interrupting scheduled backup" /root/.local/bin/borgmatic --verbosity -1 --syslog-verbosity 1
+ExecStart=systemd-inhibit --who="borgmatic" --what="sleep:shutdown" --why="Prevent interrupting scheduled backup" /root/.local/bin/borgmatic --verbosity -2 --syslog-verbosity 1

+ 2 - 0
tests/unit/test_verbosity.py

@@ -17,11 +17,13 @@ def insert_logging_mock(log_level):
 def test_verbosity_to_log_level_maps_known_verbosity_to_log_level():
     flexmock(module.borgmatic.logger).should_receive('add_custom_log_levels')
     flexmock(module.logging).ANSWER = module.borgmatic.logger.ANSWER
+    flexmock(module.logging).DISABLED = module.borgmatic.logger.DISABLED
 
     assert module.verbosity_to_log_level(module.VERBOSITY_ERROR) == logging.ERROR
     assert module.verbosity_to_log_level(module.VERBOSITY_ANSWER) == module.borgmatic.logger.ANSWER
     assert module.verbosity_to_log_level(module.VERBOSITY_SOME) == logging.INFO
     assert module.verbosity_to_log_level(module.VERBOSITY_LOTS) == logging.DEBUG
+    assert module.verbosity_to_log_level(module.VERBOSITY_DISABLED) == logging.DISABLED
 
 
 def test_verbosity_to_log_level_maps_unknown_verbosity_to_warning_level():