|
12 | 12 | import tiktoken
|
13 | 13 | from datasets import Dataset
|
14 | 14 |
|
| 15 | +from datetime import datetime |
| 16 | + |
15 | 17 | if t.TYPE_CHECKING:
|
16 | 18 | from ragas.metrics.base import Metric
|
17 | 19 |
|
@@ -238,20 +240,69 @@ def batched(iterable: t.Iterable, n: int) -> t.Iterator[t.Tuple]:
|
238 | 240 | yield batch
|
239 | 241 |
|
240 | 242 |
|
241 |
| -def set_logging_level(logger_name: str, level: int): |
| 243 | +_LOGGER_DATE_TIME = "%Y-%m-%d %H:%M:%S" |
| 244 | + |
| 245 | + |
| 246 | +def set_logging_level(logger_name: str = __name__, level: int = logging.DEBUG): |
242 | 247 | """
|
243 | 248 | Set the logging level for a logger. Useful for debugging.
|
244 | 249 | """
|
245 | 250 | logger = logging.getLogger(logger_name)
|
246 | 251 | logger.setLevel(level)
|
247 | 252 |
|
| 253 | + log_format = ( |
| 254 | + "[%(local_time)s - (%(utc_time)s UTC)] " |
| 255 | + "[%(levelname)s] [%(name)s] " |
| 256 | + "[RagasID: %(ragas_id)s, App-Version: %(app_version)s] %(message)s" |
| 257 | + ) |
| 258 | + |
| 259 | + # Create a formatter with the custom formatter |
| 260 | + formatter = _ContextualFormatter(log_format, datefmt=_LOGGER_DATE_TIME) |
| 261 | + |
248 | 262 | # Create a console handler and set its level
|
249 | 263 | console_handler = logging.StreamHandler()
|
250 |
| - console_handler.setLevel(logging.DEBUG) |
| 264 | + console_handler.setLevel(level) |
251 | 265 |
|
252 |
| - # Create a formatter and add it to the handler |
253 |
| - formatter = logging.Formatter("%(name)s - %(levelname)s - %(message)s") |
| 266 | + # Apply the formatter to the handler |
254 | 267 | console_handler.setFormatter(formatter)
|
255 | 268 |
|
256 | 269 | # Add the handler to the logger
|
257 | 270 | logger.addHandler(console_handler)
|
| 271 | + |
| 272 | + return logger |
| 273 | + |
| 274 | + |
| 275 | +class _ContextualFormatter(logging.Formatter): |
| 276 | + """ |
| 277 | + Custom logging formatter that adds context to the log records. |
| 278 | + """ |
| 279 | + |
| 280 | + def format(self, record): |
| 281 | + from ragas._analytics import get_userid |
| 282 | + from ragas import __version__ |
| 283 | + |
| 284 | + # Add UTC time |
| 285 | + record.utc_time = self.format_time(record, _LOGGER_DATE_TIME) |
| 286 | + # Add local time |
| 287 | + record.local_time = self.format_time(record, _LOGGER_DATE_TIME, local_time=True) |
| 288 | + # Add additional context |
| 289 | + record.ragas_id = get_userid() |
| 290 | + record.app_version = __version__ |
| 291 | + return super().format(record) |
| 292 | + |
| 293 | + def format_time(self, record, datefmt=None, local_time=False): |
| 294 | + dt = ( |
| 295 | + self.utc_converter(record.created) |
| 296 | + if not local_time |
| 297 | + else datetime.fromtimestamp(record.created) |
| 298 | + ) |
| 299 | + if datefmt: |
| 300 | + return dt.strftime(datefmt) |
| 301 | + return dt.isoformat() |
| 302 | + |
| 303 | + @staticmethod |
| 304 | + def utc_converter(timestamp): |
| 305 | + return datetime.utcfromtimestamp(timestamp) # UTC time conversion |
| 306 | + |
| 307 | + |
| 308 | +base_logger = set_logging_level() |
0 commit comments