Skip to content

Commit f8f2763

Browse files
committed
feat(logging): Support multiple logging behavior for new_passthrough_file_logger
1 parent f8d4182 commit f8f2763

File tree

1 file changed

+44
-29
lines changed

1 file changed

+44
-29
lines changed

airbyte/logs.py

Lines changed: 44 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -264,37 +264,20 @@ def new_passthrough_file_logger(connector_name: str) -> logging.Logger:
264264
# Prevent logging to stderr by stopping propagation to the root logger
265265
logger.propagate = False
266266

267-
if AIRBYTE_LOGGING_ROOT is None:
268-
# No temp directory available, so return a basic logger
267+
handlers = _get_passthrough_handlers(connector_name)
268+
if len(handlers) == 0:
269269
return logger
270270

271-
# Else, configure the logger to write to a file
272-
273271
# Remove any existing handlers
274272
for handler in logger.handlers:
275273
logger.removeHandler(handler)
276274

277-
folder = AIRBYTE_LOGGING_ROOT / connector_name
278-
folder.mkdir(parents=True, exist_ok=True)
279-
280-
# Create a file handler
281-
global_logger = get_global_file_logger()
282-
logfile_path = folder / f"{connector_name}-log-{str(ulid.ULID())[2:11]}.log"
283-
logfile_msg = f"Writing `{connector_name}` logs to file: {logfile_path!s}"
284-
print(logfile_msg)
285-
if global_logger:
286-
global_logger.info(logfile_msg)
287-
288-
file_handler = logging.FileHandler(logfile_path)
289-
file_handler.setLevel(logging.INFO)
290-
291275
if AIRBYTE_STRUCTURED_LOGGING:
292276
# Create a formatter and set it for the handler
293277
formatter = logging.Formatter("%(message)s")
294-
file_handler.setFormatter(formatter)
295-
296-
# Add the file handler to the logger
297-
logger.addHandler(file_handler)
278+
for handler in handlers:
279+
handler.setFormatter(formatter)
280+
logger.addHandler(handler)
298281

299282
# Configure structlog
300283
structlog.configure(
@@ -316,15 +299,14 @@ def new_passthrough_file_logger(connector_name: str) -> logging.Logger:
316299
return structlog.get_logger(f"airbyte.{connector_name}")
317300

318301
# Else, write logs in plain text
319-
320-
file_handler.setFormatter(
321-
logging.Formatter(
322-
fmt="%(asctime)s - %(levelname)s - %(message)s",
323-
datefmt="%Y-%m-%d %H:%M:%S",
324-
)
302+
formatter = logging.Formatter(
303+
fmt="%(asctime)s - %(levelname)s - %(message)s",
304+
datefmt="%Y-%m-%d %H:%M:%S",
325305
)
306+
for handler in handlers:
307+
handler.setFormatter(formatter)
308+
logger.addHandler(handler)
326309

327-
logger.addHandler(file_handler)
328310
return logger
329311

330312

@@ -353,6 +335,18 @@ def _get_global_stats_handlers() -> list[logging.Handler]:
353335
return [h for h in handlers if h is not None]
354336

355337

338+
def _get_passthrough_handlers(connector_name: str) -> list[logging.Handler]:
339+
handlers: list[logging.Handler | None] = []
340+
match AIRBYTE_LOGGING_BEHAVIOR:
341+
case LoggingBehavior.FILE_ONLY:
342+
handlers.append(_get_passthrough_file_handler(connector_name))
343+
case LoggingBehavior.CONSOLE_ONLY:
344+
handlers.append(_get_console_handler())
345+
case LoggingBehavior.FILE_AND_CONSOLE:
346+
handlers.extend([_get_passthrough_file_handler(connector_name), _get_console_handler()])
347+
return [h for h in handlers if h is not None]
348+
349+
356350
def _get_global_file_handler() -> logging.FileHandler | None:
357351
if AIRBYTE_LOGGING_ROOT is None:
358352
# No temp directory available, so return None
@@ -390,6 +384,27 @@ def _get_global_stats_file_handler() -> logging.FileHandler | None:
390384
)
391385

392386

387+
def _get_passthrough_file_handler(connector_name: str) -> logging.FileHandler | None:
388+
if AIRBYTE_LOGGING_ROOT is None:
389+
return None
390+
391+
folder = AIRBYTE_LOGGING_ROOT / connector_name
392+
folder.mkdir(parents=True, exist_ok=True)
393+
394+
# Create a file handler
395+
global_logger = get_global_file_logger()
396+
logfile_path = folder / f"{connector_name}-log-{str(ulid.ULID())[2:11]}.log"
397+
logfile_msg = f"Writing `{connector_name}` logs to file: {logfile_path!s}"
398+
print(logfile_msg)
399+
if global_logger:
400+
global_logger.info(logfile_msg)
401+
402+
file_handler = logging.FileHandler(logfile_path)
403+
file_handler.setLevel(logging.INFO)
404+
405+
return file_handler
406+
407+
393408
def _get_console_handler() -> logging.StreamHandler:
394409
return logging.StreamHandler(sys.stdout)
395410

0 commit comments

Comments
 (0)