| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- import sys
- from ray._private.utils import open_log
- from ray._raylet import StreamRedirector
- def redirect_stdout_stderr_if_needed(
- stdout_filepath: str,
- stderr_filepath: str,
- rotation_bytes: int,
- rotation_backup_count: int,
- ):
- """This function sets up redirection for stdout and stderr if needed, based on the given rotation parameters.
- params:
- stdout_filepath: the filepath stdout will be redirected to; if empty, stdout will not be redirected.
- stderr_filepath: the filepath stderr will be redirected to; if empty, stderr will not be redirected.
- rotation_bytes: number of bytes which triggers file rotation.
- rotation_backup_count: the max size of rotation files.
- """
- # Setup redirection for stdout and stderr.
- if stdout_filepath:
- StreamRedirector.redirect_stdout(
- stdout_filepath,
- rotation_bytes,
- rotation_backup_count,
- False, # tee_to_stdout
- False, # tee_to_stderr
- )
- if stderr_filepath:
- StreamRedirector.redirect_stderr(
- stderr_filepath,
- rotation_bytes,
- rotation_backup_count,
- False, # tee_to_stdout
- False, # tee_to_stderr
- )
- # Setup python system stdout/stderr.
- stdout_fileno = sys.stdout.fileno()
- stderr_fileno = sys.stderr.fileno()
- # We also manually set sys.stdout and sys.stderr because that seems to
- # have an effect on the output buffering. Without doing this, stdout
- # and stderr are heavily buffered resulting in seemingly lost logging
- # statements. We never want to close the stdout file descriptor, dup2 will
- # close it when necessary and we don't want python's GC to close it.
- sys.stdout = open_log(stdout_fileno, unbuffered=True, closefd=False)
- sys.stderr = open_log(stderr_fileno, unbuffered=True, closefd=False)
|