File size: 1,302 Bytes
06671aa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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