import logging import datetime import contextvars current_trace_run = contextvars.ContextVar('current_trace_run', default=None) class LangSmithHandler(logging.Handler): def emit(self, record): run = current_trace_run.get() if run: try: run.add_event({ "name": "log", "time": datetime.datetime.now(datetime.timezone.utc), "kwargs": { "level": record.levelname, "message": self.format(record), "logger_name": record.name, "file": record.filename, "line": record.lineno } }) except Exception: pass def setup_logger(name: str) -> logging.Logger: logger = logging.getLogger(name) if not logger.handlers: logger.setLevel(logging.INFO) formatter = logging.Formatter('%(asctime)s - %(levelname)s - [%(name)s] %(message)s') ch = logging.StreamHandler() ch.setFormatter(formatter) logger.addHandler(ch) ls_handler = LangSmithHandler() ls_handler.setFormatter(formatter) logger.addHandler(ls_handler) return logger