|
@@ -46,17 +46,16 @@ def setup_logger(app, env):
|
|
|
"""
|
|
"""
|
|
|
log_path = app.config.get('log_path', '.')
|
|
log_path = app.config.get('log_path', '.')
|
|
|
|
|
|
|
|
- # Error logger setup
|
|
|
|
|
- error_logger = setup_error_logger(log_path, env)
|
|
|
|
|
- app.error_logger = error_logger
|
|
|
|
|
-
|
|
|
|
|
- # App logger setup
|
|
|
|
|
- app_logger = setup_app_logger(log_path, env)
|
|
|
|
|
- app.logger = app_logger
|
|
|
|
|
|
|
+ # Expand the path if home directory is specified
|
|
|
|
|
+ log_path = os.path.expanduser(log_path)
|
|
|
|
|
|
|
|
- # Request logger setup
|
|
|
|
|
- app_log_file = os.path.join(log_path, 'app.log')
|
|
|
|
|
- setup_request_logger(app_log_file, env)
|
|
|
|
|
|
|
+ # Ensure the log path exists or create it if not
|
|
|
|
|
+ if not os.path.exists(log_path):
|
|
|
|
|
+ try:
|
|
|
|
|
+ os.makedirs(log_path)
|
|
|
|
|
+ print(f"created log dir: {log_path}")
|
|
|
|
|
+ except OSError as e:
|
|
|
|
|
+ raise RuntimeError(f"Unable to create log directory at '{log_path}': {e}")
|
|
|
|
|
|
|
|
# Get log level from environment variable, default to INFO
|
|
# Get log level from environment variable, default to INFO
|
|
|
log_level_name = os.environ.get('LOG_LEVEL', 'INFO').upper()
|
|
log_level_name = os.environ.get('LOG_LEVEL', 'INFO').upper()
|
|
@@ -67,8 +66,17 @@ def setup_logger(app, env):
|
|
|
app.logger.warning(f"Invalid LOG_LEVEL '{log_level_name}'. Defaulting to INFO.")
|
|
app.logger.warning(f"Invalid LOG_LEVEL '{log_level_name}'. Defaulting to INFO.")
|
|
|
log_level = logging.INFO
|
|
log_level = logging.INFO
|
|
|
|
|
|
|
|
- # Set the overall logger level
|
|
|
|
|
- app.logger.setLevel(log_level)
|
|
|
|
|
|
|
+ # App logger setup
|
|
|
|
|
+ app_logger = setup_app_logger(log_path, env, log_level)
|
|
|
|
|
+ app.logger = app_logger
|
|
|
|
|
+
|
|
|
|
|
+ # Request logger setup
|
|
|
|
|
+ app_log_file = os.path.join(log_path, 'app.log')
|
|
|
|
|
+ setup_request_logger(app_log_file, env, log_level)
|
|
|
|
|
+
|
|
|
|
|
+ # Error logger setup
|
|
|
|
|
+ error_logger = setup_error_logger(log_path, env)
|
|
|
|
|
+ app.error_logger = error_logger
|
|
|
|
|
|
|
|
def setup_error_logger(log_path, env):
|
|
def setup_error_logger(log_path, env):
|
|
|
"""
|
|
"""
|
|
@@ -90,6 +98,9 @@ def setup_error_logger(log_path, env):
|
|
|
error_logger.addHandler(error_handler)
|
|
error_logger.addHandler(error_handler)
|
|
|
error_logger.setLevel(logging.ERROR)
|
|
error_logger.setLevel(logging.ERROR)
|
|
|
error_logger.propagate = False
|
|
error_logger.propagate = False
|
|
|
|
|
+
|
|
|
|
|
+ add_console_handler_if_localnet(env, error_logger, logging.ERROR)
|
|
|
|
|
+
|
|
|
return error_logger
|
|
return error_logger
|
|
|
|
|
|
|
|
def setup_app_logger(log_path, env, log_level=logging.INFO):
|
|
def setup_app_logger(log_path, env, log_level=logging.INFO):
|
|
@@ -110,9 +121,12 @@ def setup_app_logger(log_path, env, log_level=logging.INFO):
|
|
|
app_logger.addHandler(app_handler)
|
|
app_logger.addHandler(app_handler)
|
|
|
app_logger.setLevel(log_level)
|
|
app_logger.setLevel(log_level)
|
|
|
app_logger.propagate = False
|
|
app_logger.propagate = False
|
|
|
|
|
+
|
|
|
|
|
+ add_console_handler_if_localnet(env, app_logger, log_level)
|
|
|
|
|
+
|
|
|
return app_logger
|
|
return app_logger
|
|
|
|
|
|
|
|
-def setup_request_logger(log_file, env):
|
|
|
|
|
|
|
+def setup_request_logger(log_file, env, log_level=logging.INFO):
|
|
|
"""
|
|
"""
|
|
|
Configures the request logger to handle HTTP request logs based on the specified environment.
|
|
Configures the request logger to handle HTTP request logs based on the specified environment.
|
|
|
|
|
|
|
@@ -124,22 +138,18 @@ def setup_request_logger(log_file, env):
|
|
|
Args:
|
|
Args:
|
|
|
log_file (str): Path to the log file where HTTP requests should be logged.
|
|
log_file (str): Path to the log file where HTTP requests should be logged.
|
|
|
env (str): The application environment (e.g., 'localnet', 'testnet', 'mainnet').
|
|
env (str): The application environment (e.g., 'localnet', 'testnet', 'mainnet').
|
|
|
|
|
+ log_level (int): The logging level (default is INFO).
|
|
|
"""
|
|
"""
|
|
|
# Get the werkzeug logger that logs requests
|
|
# Get the werkzeug logger that logs requests
|
|
|
request_logger = logging.getLogger('werkzeug')
|
|
request_logger = logging.getLogger('werkzeug')
|
|
|
- request_logger.setLevel(logging.INFO)
|
|
|
|
|
|
|
+ request_logger.setLevel(log_level)
|
|
|
request_logger.propagate = False
|
|
request_logger.propagate = False
|
|
|
|
|
|
|
|
- # If localnet, log to console
|
|
|
|
|
- if env == 'localnet':
|
|
|
|
|
- console_handler = logging.StreamHandler() # Outputs to the console
|
|
|
|
|
- console_handler.setLevel(logging.INFO)
|
|
|
|
|
- request_logger.addHandler(console_handler)
|
|
|
|
|
- # Log to file for other environments
|
|
|
|
|
- else:
|
|
|
|
|
- file_handler = logging.FileHandler(log_file)
|
|
|
|
|
- file_handler.setLevel(logging.INFO)
|
|
|
|
|
- request_logger.addHandler(file_handler)
|
|
|
|
|
|
|
+ file_handler = logging.FileHandler(log_file)
|
|
|
|
|
+ file_handler.setLevel(log_level)
|
|
|
|
|
+ request_logger.addHandler(file_handler)
|
|
|
|
|
+
|
|
|
|
|
+ add_console_handler_if_localnet(env, request_logger, log_level)
|
|
|
|
|
|
|
|
def initialize_log_handler(log_file, env):
|
|
def initialize_log_handler(log_file, env):
|
|
|
"""
|
|
"""
|
|
@@ -154,4 +164,20 @@ def initialize_log_handler(log_file, env):
|
|
|
else:
|
|
else:
|
|
|
return logging.FileHandler(log_file)
|
|
return logging.FileHandler(log_file)
|
|
|
|
|
|
|
|
|
|
+def add_console_handler_if_localnet(env, logger, log_level=logging.INFO):
|
|
|
|
|
+ """
|
|
|
|
|
+ Adds a console handler to the given logger if the environment is 'localnet'.
|
|
|
|
|
|
|
|
|
|
+ Args:
|
|
|
|
|
+ env (str): The current environment (e.g., 'localnet', 'mainnet').
|
|
|
|
|
+ logger (logging.Logger): The logger to which the console handler should be added.
|
|
|
|
|
+ log_level (int): The logging level for the console handler.
|
|
|
|
|
+ """
|
|
|
|
|
+
|
|
|
|
|
+ # If localnet, also log to console
|
|
|
|
|
+ if env == 'localnet':
|
|
|
|
|
+ console_handler = logging.StreamHandler()
|
|
|
|
|
+ console_handler.setLevel(log_level)
|
|
|
|
|
+ formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
|
|
|
|
|
+ console_handler.setFormatter(formatter)
|
|
|
|
|
+ logger.addHandler(console_handler)
|