Skip to content

Logger

gepa.logging.logger.Logger(filename, mode='a')

Bases: LoggerProtocol

Source code in gepa/logging/logger.py
def __init__(self, filename, mode="a"):
    self.file_handle = open(filename, mode)
    self.file_handle_stderr = open(filename.replace("run_log.", "run_log_stderr."), mode)
    self.modified_sys = False

Attributes

file_handle = open(filename, mode) instance-attribute

file_handle_stderr = open(filename.replace('run_log.', 'run_log_stderr.'), mode) instance-attribute

modified_sys = False instance-attribute

Functions

__enter__()

Source code in gepa/logging/logger.py
def __enter__(self):
    self.original_stdout = sys.stdout
    self.original_stderr = sys.stderr
    sys.stdout = Tee(sys.stdout, self.file_handle)
    sys.stderr = Tee(sys.stderr, self.file_handle_stderr)
    self.modified_sys = True
    return self

__exit__(exc_type, exc_value, traceback)

Source code in gepa/logging/logger.py
def __exit__(self, exc_type, exc_value, traceback):
    sys.stdout = self.original_stdout
    sys.stderr = self.original_stderr
    self.file_handle.close()
    self.file_handle_stderr.close()
    self.modified_sys = False

log(*args, **kwargs)

Source code in gepa/logging/logger.py
def log(self, *args, **kwargs):
    if self.modified_sys:
        print(*args, **kwargs)
    else:
        # Emulate print(*args, **kwargs) behavior but write to the file
        print(*args, **kwargs)
        print(*args, file=self.file_handle_stderr, **kwargs)
    self.file_handle.flush()
    self.file_handle_stderr.flush()