45 lines
1.6 KiB
Python
45 lines
1.6 KiB
Python
import logging
|
|
import os
|
|
import sys
|
|
|
|
|
|
def setup_logging(log_dir, config_name):
|
|
"""Configures logging to output to both file and console.
|
|
|
|
Args:
|
|
log_dir (str): The directory where the log file should be saved.
|
|
config_name (str): The name of the configuration run, used for the log filename.
|
|
"""
|
|
# Ensure log directory exists
|
|
os.makedirs(log_dir, exist_ok=True)
|
|
|
|
log_filename = f"{config_name}_train.log"
|
|
log_filepath = os.path.join(log_dir, log_filename)
|
|
|
|
# Configure the root logger
|
|
logging.basicConfig(
|
|
level=logging.INFO, # Log INFO level and above (INFO, WARNING, ERROR, CRITICAL)
|
|
format="%(asctime)s [%(levelname)s] %(message)s",
|
|
datefmt="%Y-%m-%d %H:%M:%S",
|
|
handlers=[
|
|
logging.FileHandler(log_filepath), # Log to a file
|
|
logging.StreamHandler(sys.stdout), # Log to the console (stdout)
|
|
],
|
|
# Force=True ensures that if basicConfig was called before (e.g., by a library),
|
|
# this configuration will overwrite it. Use with caution if libraries might
|
|
# configure logging themselves in complex ways.
|
|
force=True,
|
|
)
|
|
|
|
logging.info(f"Logging configured. Log file: {log_filepath}")
|
|
|
|
|
|
# Example usage (can be removed or kept for testing):
|
|
if __name__ == "__main__":
|
|
print("Testing logging setup...")
|
|
setup_logging("temp_logs", "test_config")
|
|
logging.info("This is an info message.")
|
|
logging.warning("This is a warning message.")
|
|
logging.error("This is an error message.")
|
|
print("Check 'temp_logs/test_config_train.log' and console output.")
|