55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
"""
|
|
A utility logger that allows multiple loggers to be daisy-chained.
|
|
"""
|
|
from typing import Dict, Any, Optional, IO
|
|
import sys
|
|
|
|
from spacy import Language
|
|
from .util import LoggerT
|
|
|
|
|
|
def chain_logger_v1(
|
|
logger1: Optional[LoggerT] = None,
|
|
logger2: Optional[LoggerT] = None,
|
|
logger3: Optional[LoggerT] = None,
|
|
logger4: Optional[LoggerT] = None,
|
|
logger5: Optional[LoggerT] = None,
|
|
logger6: Optional[LoggerT] = None,
|
|
logger7: Optional[LoggerT] = None,
|
|
logger8: Optional[LoggerT] = None,
|
|
logger9: Optional[LoggerT] = None,
|
|
logger10: Optional[LoggerT] = None,
|
|
) -> LoggerT:
|
|
def setup_logger(nlp: Language, stdout: IO = sys.stdout, stderr: IO = sys.stderr):
|
|
loggers = [
|
|
logger1,
|
|
logger2,
|
|
logger3,
|
|
logger4,
|
|
logger5,
|
|
logger6,
|
|
logger7,
|
|
logger8,
|
|
logger9,
|
|
logger10,
|
|
]
|
|
if not any(loggers):
|
|
raise ValueError("No loggers passed to chain logger")
|
|
callbacks = [
|
|
setup(nlp, stdout, stderr) for setup in loggers if setup is not None
|
|
]
|
|
|
|
def log_step(info: Optional[Dict[str, Any]]):
|
|
nonlocal callbacks
|
|
for log_stepper, _ in callbacks:
|
|
log_stepper(info)
|
|
|
|
def finalize():
|
|
nonlocal callbacks
|
|
for _, finalizer in callbacks:
|
|
finalizer()
|
|
|
|
return log_step, finalize
|
|
|
|
return setup_logger
|