ソースを参照

Reopen the file given by "--log-file" flag if an external program rotates the log file while borgmatic is running.

Dan Helfman 5 年 前
コミット
0a9f4e8708
3 ファイル変更9 行追加8 行削除
  1. 2 1
      NEWS
  2. 1 1
      borgmatic/logger.py
  3. 6 6
      tests/unit/test_logger.py

+ 2 - 1
NEWS

@@ -1,5 +1,6 @@
 1.4.10.dev0
- *
+ * Reopen the file given by "--log-file" flag if an external program rotates the log file while
+   borgmatic is running.
 
 1.4.9
  * #228: Database dump hooks for MySQL/MariaDB, so you can easily dump your databases before backups

+ 1 - 1
borgmatic/logger.py

@@ -104,7 +104,7 @@ def configure_logging(
         syslog_handler.setLevel(syslog_log_level)
         handlers = (console_handler, syslog_handler)
     elif log_file:
-        file_handler = logging.FileHandler(log_file)
+        file_handler = logging.handlers.WatchedFileHandler(log_file)
         file_handler.setFormatter(logging.Formatter('[%(asctime)s] %(levelname)s: %(message)s'))
         file_handler.setLevel(log_file_log_level)
         handlers = (console_handler, file_handler)

+ 6 - 6
tests/unit/test_logger.py

@@ -203,10 +203,10 @@ def test_configure_logging_to_logfile_instead_of_syslog():
     )
     flexmock(module.os.path).should_receive('exists').with_args('/dev/log').and_return(True)
     flexmock(module.logging.handlers).should_receive('SysLogHandler').never()
-    file_handler = logging.FileHandler('/tmp/logfile')
-    flexmock(module.logging).should_receive('FileHandler').with_args('/tmp/logfile').and_return(
-        file_handler
-    ).once()
+    file_handler = logging.handlers.WatchedFileHandler('/tmp/logfile')
+    flexmock(module.logging.handlers).should_receive('WatchedFileHandler').with_args(
+        '/tmp/logfile'
+    ).and_return(file_handler).once()
 
     module.configure_logging(
         console_log_level=logging.INFO, log_file_log_level=logging.DEBUG, log_file='/tmp/logfile'
@@ -214,12 +214,12 @@ def test_configure_logging_to_logfile_instead_of_syslog():
 
 
 def test_configure_logging_skips_logfile_if_argument_is_none():
-    # No FileHandler added if argument --log-file is None
+    # No WatchedFileHandler added if argument --log-file is None
     flexmock(module).should_receive('interactive_console').and_return(False)
     flexmock(module.logging).should_receive('basicConfig').with_args(
         level=logging.INFO, handlers=tuple
     )
     flexmock(module.os.path).should_receive('exists').and_return(False)
-    flexmock(module.logging).should_receive('FileHandler').never()
+    flexmock(module.logging.handlers).should_receive('WatchedFileHandler').never()
 
     module.configure_logging(console_log_level=logging.INFO, log_file=None)