SERVER-77561: configurable resmoke logger and buffered file handler for resmoke logging

GitOrigin-RevId: 9627f667c70d6ee3d4958c2a41f3502ecfce6548
This commit is contained in:
julianedwards 2024-05-03 16:50:40 -04:00 committed by MongoDB Bot
parent e2b1ef7fbd
commit f3a9397b83
3 changed files with 26 additions and 2 deletions

View File

@ -162,6 +162,29 @@ class BufferedHandler(logging.Handler):
logging.Handler.close(self)
class BufferedFileHandler(BufferedHandler):
"""File handler with in-memory buffering."""
def __init__(self, filename, capacity=2000, interval_secs=600):
"""Initialize the handler with the filename and buffer capacity and flush interval."""
super().__init__(capacity, interval_secs)
self.file = open(filename, "a")
def process_record(self, record):
"""Return the formatted record message appended with a newline."""
return self.format(record) + "\n"
def _flush_buffer_with_lock(self, buf, close_called):
"""Write the buffered log lines to the destination file."""
self.file.writelines(buf)
def close(self):
"""Close the handler and the file descriptor."""
super().close()
self.file.close()
class HTTPHandler(object):
"""A class which sends data to a web server using POST requests."""

View File

@ -7,6 +7,7 @@ import yaml
from . import buildlogger
from . import formatters
from . import handlers
from .. import config
from .. import errors
@ -425,7 +426,7 @@ def _add_evergreen_handler(logger, logging_config, job_num, test_id=None):
fp = f"{_get_evergreen_log_dirname()}/{get_evergreen_log_name(job_num, test_id)}"
os.makedirs(os.path.dirname(fp), exist_ok=True)
handler = logging.FileHandler(filename=fp, mode="a")
handler = handlers.BufferedFileHandler(fp)
handler.setFormatter(
formatters.EvergreenLogFormatter(fmt=logger_info.get("format", _DEFAULT_FORMAT)))
logger.addHandler(handler)

View File

@ -1391,7 +1391,7 @@ functions:
${resmoke_args} \
$extra_args \
${test_flags} \
--log=buildlogger \
--log=${resmoke_logger} \
--staggerJobs=on \
--installDir=${install_dir|dist-test/bin} \
--buildId=${build_id} \