class BasePerfRecorder:
    def record(self, name, value, unit):
        pass

    def log(self, msg):
        pass


class PerfRecorder(BasePerfRecorder):
    def record(self, name, value, unit):
        print(f"perf: {name}={value} {unit}")

    def log(self, msg):
        print(msg)


class JSONPerfRecorder(BasePerfRecorder):
    def __init__(self):
        super().__init__()
        self.recs = {}
        self.logs = []

    def record(self, name, value, unit):
        assert isinstance(name, str)
        assert isinstance(value, (int, float, str))
        assert isinstance(unit, str)
        self.recs[name] = {"value": value, "unit": unit}

    def log(self, msg):
        assert isinstance(msg, str)
        self.logs.append(msg)

    def to_object(self):
        return {"records": self.recs, "logs": self.logs}
