Browse Source

Refactor logger setup to load configuration from YAML file, add rotating file handler, and improve console logging format.

liuyuqi-cnb 2 months ago
parent
commit
e0a86a31bf
2 changed files with 79 additions and 20 deletions
  1. 37 0
      config.yml
  2. 42 20
      repo_sync/utils/logger.py

+ 37 - 0
config.yml

@@ -0,0 +1,37 @@
+accounts:
+  github:
+    enable: 1
+    1:
+      username: jianboy
+      token: xx
+      private: true
+    2:
+      username: xx
+      token: xx
+      private: true
+  gitlab:
+    enable: 1
+    1:
+      host: https://gitlab.com
+      username: jianboy
+      token: glpat-xx-m1
+      private: true
+    2:
+      host: https://gitlab.com
+      username: jianboy
+      token: glpat-xx-m1
+      private: true
+
+log:
+  level: debug
+  file: /tmp/repo_sync.log
+  max_size: 100MB
+  max_backups: 3
+  max_age: 7
+  # console_formatter,file_formatter
+  console_formatter:
+    level: debug
+    format: "%(asctime)s - %(levelname)s - %(message)s"
+  file_formatter:
+    level: debug
+    format: "%(asctime)s - %(levelname)s - %(message)s"

+ 42 - 20
repo_sync/utils/logger.py

@@ -1,4 +1,6 @@
 import logging
 import logging
+import yaml
+import os
 from colorama import Fore, Style
 from colorama import Fore, Style
 import colorama
 import colorama
 colorama.init()
 colorama.init()
@@ -22,29 +24,49 @@ class ColoredFormatter(logging.Formatter):
         record.msg = original_msg
         record.msg = original_msg
         
         
         return formatted_message
         return formatted_message
-    
-# Configure logger
-logger = logging.getLogger('repo_sync')
-logger.setLevel(logging.INFO)
-
-# Create console handler
-console_handler = logging.StreamHandler()
-console_handler.setLevel(logging.INFO)
-
-# Create file handler
-file_handler = logging.FileHandler('repo_sync.log')
-file_handler.setLevel(logging.INFO)
 
 
-# Use the custom colored formatter
-console_formatter = ColoredFormatter('%(asctime)s - %(levelname)s - %(message)s')
-console_handler.setFormatter(console_formatter)
+def load_config():
+    config_path = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), 'config.yml')
+    with open(config_path, 'r') as f:
+        return yaml.safe_load(f)
 
 
-file_formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
-file_handler.setFormatter(file_formatter)
+def setup_logger():
+    config = load_config()
+    log_config = config.get('log', {})
+    
+    # Configure logger
+    logger = logging.getLogger('repo_sync')
+    logger.setLevel(getattr(logging, log_config.get('level', 'INFO').upper()))
+    
+    # Create console handler
+    console_handler = logging.StreamHandler()
+    console_handler.setLevel(getattr(logging, log_config.get('console_formatter', {}).get('level', 'INFO').upper()))
+    
+    # Create file handler with rotation
+    from logging.handlers import RotatingFileHandler
+    file_handler = RotatingFileHandler(
+        log_config.get('file', 'repo_sync.log'),
+        maxBytes=log_config.get('max_size', 100 * 1024 * 1024),  # Default 100MB
+        backupCount=log_config.get('max_backups', 3)
+    )
+    file_handler.setLevel(getattr(logging, log_config.get('file_formatter', {}).get('level', 'INFO').upper()))
+    
+    # Use the custom colored formatter for console
+    console_formatter = ColoredFormatter(log_config.get('console_formatter', {}).get('format', '%(asctime)s - %(levelname)s - %(message)s'))
+    console_handler.setFormatter(console_formatter)
+    
+    # Use standard formatter for file
+    file_formatter = logging.Formatter(log_config.get('file_formatter', {}).get('format', '%(asctime)s - %(levelname)s - %(message)s'))
+    file_handler.setFormatter(file_formatter)
+    
+    # Add handlers to logger
+    logger.addHandler(console_handler)
+    logger.addHandler(file_handler)
+    
+    return logger
 
 
-# Add handler to logger
-logger.addHandler(console_handler)
-logger.addHandler(file_handler)
+# Initialize logger
+logger = setup_logger()
 
 
 # Export logger
 # Export logger
 __all__ = ['logger'] 
 __all__ = ['logger']