diff --git a/logfire/_internal/config.py b/logfire/_internal/config.py index 1d94d7020..488f25444 100644 --- a/logfire/_internal/config.py +++ b/logfire/_internal/config.py @@ -14,7 +14,7 @@ from dataclasses import dataclass, field from pathlib import Path from threading import RLock, Thread -from typing import TYPE_CHECKING, Any, Callable, Literal, TypedDict +from typing import TYPE_CHECKING, Any, Callable, Literal, TextIO, TypedDict from urllib.parse import urljoin from uuid import uuid4 @@ -141,6 +141,7 @@ class ConsoleOptions: """Options for controlling console output.""" + output: TextIO | None = None colors: ConsoleColorsValues = 'auto' span_style: Literal['simple', 'indented', 'show-parents'] = 'show-parents' """How spans are shown in the console.""" diff --git a/logfire/_internal/exporters/console.py b/logfire/_internal/exporters/console.py index 5febe1609..3bb898bb5 100644 --- a/logfire/_internal/exporters/console.py +++ b/logfire/_internal/exporters/console.py @@ -118,7 +118,15 @@ def __init__( verbose: bool = False, min_log_level: LevelName = 'info', ) -> None: - self._output = output or sys.stdout + if isinstance(output, str): + if output.lower() == 'stderr': + self._output = sys.stderr + elif output.lower() == 'stdout': + self._output = sys.stdout + else: + self._output = output or sys.stdout + else: + self._output = output or sys.stdout if colors == 'auto': force_terminal = None else: