@@ -264,37 +264,20 @@ def new_passthrough_file_logger(connector_name: str) -> logging.Logger:
264
264
# Prevent logging to stderr by stopping propagation to the root logger
265
265
logger .propagate = False
266
266
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 :
269
269
return logger
270
270
271
- # Else, configure the logger to write to a file
272
-
273
271
# Remove any existing handlers
274
272
for handler in logger .handlers :
275
273
logger .removeHandler (handler )
276
274
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
-
291
275
if AIRBYTE_STRUCTURED_LOGGING :
292
276
# Create a formatter and set it for the handler
293
277
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 )
298
281
299
282
# Configure structlog
300
283
structlog .configure (
@@ -316,15 +299,14 @@ def new_passthrough_file_logger(connector_name: str) -> logging.Logger:
316
299
return structlog .get_logger (f"airbyte.{ connector_name } " )
317
300
318
301
# 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" ,
325
305
)
306
+ for handler in handlers :
307
+ handler .setFormatter (formatter )
308
+ logger .addHandler (handler )
326
309
327
- logger .addHandler (file_handler )
328
310
return logger
329
311
330
312
@@ -353,6 +335,18 @@ def _get_global_stats_handlers() -> list[logging.Handler]:
353
335
return [h for h in handlers if h is not None ]
354
336
355
337
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
+
356
350
def _get_global_file_handler () -> logging .FileHandler | None :
357
351
if AIRBYTE_LOGGING_ROOT is None :
358
352
# No temp directory available, so return None
@@ -390,6 +384,27 @@ def _get_global_stats_file_handler() -> logging.FileHandler | None:
390
384
)
391
385
392
386
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
+
393
408
def _get_console_handler () -> logging .StreamHandler :
394
409
return logging .StreamHandler (sys .stdout )
395
410
0 commit comments