From 8a8aa5064e7833af21aebfaa4baf55d209da2040 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Thu, 12 Sep 2024 13:28:15 +0300 Subject: [PATCH] fix(formatter): time format --- src/bunyan_formatter/logger.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/bunyan_formatter/logger.py b/src/bunyan_formatter/logger.py index e0f780a..2b1f797 100644 --- a/src/bunyan_formatter/logger.py +++ b/src/bunyan_formatter/logger.py @@ -1,12 +1,14 @@ import json import logging import socket +import time from logging import Formatter, LogRecord from pathlib import Path +from typing import ClassVar, Optional class BunyanFormatter(Formatter): - LEVEL_MAP = { + LEVEL_MAP: ClassVar[dict[int, int]] = { logging.NOTSET: 10, logging.DEBUG: 20, logging.INFO: 30, @@ -38,10 +40,19 @@ class BunyanFormatter(Formatter): "levelname": record.levelname, "hostname": hostname, "pid": record.process, - "time": self.formatTime(record, "%Y-%m-%dT%H:%M:%S.%fZ"), + "time": self.formatTime(record), "target": record.name, "line": record.lineno, "file": str(relative_path), } return json.dumps(log_entry) + + def formatTime(self, record: LogRecord, datefmt: Optional[str] = None) -> str: # noqa: N802 + ct = self.converter(record.created) + if datefmt: + s = time.strftime(datefmt, ct) + else: + t = time.strftime("%Y-%m-%dT%H:%M:%S", ct) + s = f"{t}.{int(record.msecs):03d}Z" + return s