Skip to content

Commit 2126307

Browse files
committed
Ensure we save every log message from root logger
Closes #60
1 parent 0879c71 commit 2126307

2 files changed

Lines changed: 19 additions & 13 deletions

File tree

codeclash/tournaments/tournament.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from pathlib import Path
55

66
from codeclash.utils.environment import create_file_in_container
7-
from codeclash.utils.log import get_logger
7+
from codeclash.utils.log import add_file_handler, get_logger
88

99

1010
class AbstractTournament:
@@ -20,6 +20,7 @@ def __init__(self, config: dict, *, name: str, output_dir: Path, **kwargs):
2020
"created_timestamp": int(time.time()),
2121
}
2222
self.logger = get_logger(self.name, log_path=self.local_output_dir / "tournament.log", emoji="🏆")
23+
add_file_handler(get_logger("."), self.local_output_dir / "everything.log")
2324

2425
@property
2526
def local_output_dir(self) -> Path:

codeclash/utils/log.py

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,22 @@ def format(self, record: logging.LogRecord) -> str:
6464
return capture.get().rstrip()
6565

6666

67+
def add_file_handler(logger: logging.Logger, log_path: Path) -> None:
68+
"""Add a file handler to the logger with standard formatting."""
69+
log_path.parent.mkdir(parents=True, exist_ok=True)
70+
file_handler = logging.FileHandler(log_path)
71+
file_handler.setLevel(_FILE_LEVEL)
72+
73+
# Use a standard formatter for file logs with time, name, and level
74+
file_formatter = logging.Formatter(
75+
fmt="%(asctime)s [%(name)s] %(levelname)s %(message)s",
76+
datefmt="%Y-%m-%d %H:%M:%S",
77+
)
78+
file_handler.setFormatter(file_formatter)
79+
80+
logger.addHandler(file_handler)
81+
82+
6783
def get_logger(name: str, *, emoji: str = "", log_path: Path | None = None) -> logging.Logger:
6884
"""Get logger. Use this instead of `logging.getLogger` to ensure
6985
that the logger is set up with the correct handlers.
@@ -86,17 +102,6 @@ def get_logger(name: str, *, emoji: str = "", log_path: Path | None = None) -> l
86102
logger.propagate = True
87103

88104
if log_path is not None:
89-
log_path.parent.mkdir(parents=True, exist_ok=True)
90-
file_handler = logging.FileHandler(log_path)
91-
file_handler.setLevel(_FILE_LEVEL)
92-
93-
# Use a standard formatter for file logs with time, name, and level
94-
file_formatter = logging.Formatter(
95-
fmt="%(asctime)s [%(name)s] %(levelname)s %(message)s",
96-
datefmt="%Y-%m-%d %H:%M:%S",
97-
)
98-
file_handler.setFormatter(file_formatter)
99-
100-
logger.addHandler(file_handler)
105+
add_file_handler(logger, log_path)
101106

102107
return logger

0 commit comments

Comments
 (0)