def testEnsureAsciiFalse(self): fr = jsonlogger.JsonFormatter(json_ensure_ascii=False) self.logHandler.setFormatter(fr) self.logger.info("Привет") msg = self.buffer.getvalue().split('"message": "', 1)[1].split('"', 1)[0] self.assertEqual(msg, "Привет")
def testFormatKeys(self): supported_keys = [ "asctime", "created", "filename", "funcName", "levelname", "levelno", "lineno", "module", "msecs", "message", "name", "pathname", "process", "processName", "relativeCreated", "thread", "threadName", ] log_format = lambda x: ["%({0:s})".format(i) for i in x] custom_format = " ".join(log_format(supported_keys)) fr = jsonlogger.JsonFormatter(custom_format) self.logHandler.setFormatter(fr) msg = "testing logging format" self.logger.info(msg) log_msg = self.buffer.getvalue() log_json = json.loads(log_msg) for supported_key in supported_keys: if supported_key in log_json: self.assertTrue(True)
def testEnsureAsciiTrue(self): fr = jsonlogger.JsonFormatter() self.logHandler.setFormatter(fr) self.logger.info("Привет") msg = self.buffer.getvalue().split('"message": "', 1)[1].split('"', 1)[0] self.assertEqual(msg, r"\u041f\u0440\u0438\u0432\u0435\u0442")
def testUnknownFormatKey(self): fr = jsonlogger.JsonFormatter("%(unknown_key)s %(message)s") self.logHandler.setFormatter(fr) msg = "testing unknown logging format" try: self.logger.info(msg) except: self.assertTrue(False, "Should succeed")
def testDefaultFormat(self): fr = jsonlogger.JsonFormatter() self.logHandler.setFormatter(fr) msg = "testing logging format" self.logger.info(msg) logJson = json.loads(self.buffer.getvalue()) self.assertEqual(logJson["message"], msg)
def testHandlesSerialisationError(self): fr = jsonlogger.JsonFormatter() self.logHandler.setFormatter(fr) circular = {} circular["self"] = circular self.logger.error({"message": "Here's a log", "log_data": circular}) outer_message = '{"message": "Unable to serialise value for logging", "log_record": %s, "exception": "ValueError: Circular reference detected"}\n' inner_message = ( "\"{'message': \\\"Here's a log\\\", 'log_data': {'self': {...}}}\"" ) expected_message = outer_message % inner_message logged_msg = self.buffer.getvalue() self.assertEqual(logged_msg, expected_message)
def testJsonCustomDefault(self): def custom(o): return "very custom" fr = jsonlogger.JsonFormatter(json_default=custom) self.logHandler.setFormatter(fr) msg = { "adate": datetime.datetime(1999, 12, 31, 23, 59), "normal": "value" } self.logger.info(msg) logJson = json.loads(self.buffer.getvalue()) self.assertEqual(logJson.get("adate"), "very custom") self.assertEqual(logJson.get("normal"), "value")
def testExcInfo(self): fr = jsonlogger.JsonFormatter() self.logHandler.setFormatter(fr) try: raise Exception("test") except Exception: self.logger.exception("hello") expected_value = traceback.format_exc() # Formatter removes trailing new line if expected_value.endswith("\n"): expected_value = expected_value[:-1] logJson = json.loads(self.buffer.getvalue()) self.assertEqual(logJson.get("exc_info"), expected_value)
def testJsonDefaultEncoder(self): fr = jsonlogger.JsonFormatter() self.logHandler.setFormatter(fr) msg = { "adate": datetime.datetime(1999, 12, 31, 23, 59), "otherdate": datetime.date(1789, 7, 14), "otherdatetime": datetime.datetime(1789, 7, 14, 23, 59), "otherdatetimeagain": datetime.datetime(1900, 1, 1), } self.logger.info(msg) logJson = json.loads(self.buffer.getvalue()) self.assertEqual(logJson.get("adate"), "1999-12-31T23:59:00") self.assertEqual(logJson.get("otherdate"), "1789-07-14") self.assertEqual(logJson.get("otherdatetime"), "1789-07-14T23:59:00") self.assertEqual(logJson.get("otherdatetimeagain"), "1900-01-01T00:00:00")
def testLogExtra(self): fr = jsonlogger.JsonFormatter() self.logHandler.setFormatter(fr) extra = { "text": "testing logging", "num": 1, 5: "9", "nested": { "more": "data" }, } self.logger.info("hello", extra=extra) logJson = json.loads(self.buffer.getvalue()) self.assertEqual(logJson.get("text"), extra["text"]) self.assertEqual(logJson.get("num"), extra["num"]) self.assertEqual(logJson.get("5"), extra[5]) self.assertEqual(logJson.get("nested"), extra["nested"]) self.assertEqual(logJson["message"], "hello")
def testLogADict(self): fr = jsonlogger.JsonFormatter() self.logHandler.setFormatter(fr) msg = { "text": "testing logging", "num": 1, 5: "9", "nested": { "more": "data" } } self.logger.info(msg) logJson = json.loads(self.buffer.getvalue()) self.assertEqual(logJson.get("text"), msg["text"]) self.assertEqual(logJson.get("num"), msg["num"]) self.assertEqual(logJson.get("5"), msg[5]) self.assertEqual(logJson.get("nested"), msg["nested"]) self.assertEqual(logJson["message"], None)
def testCustomObjectSerialization(self): def encode_complex(z): if isinstance(z, complex): return (z.real, z.imag) else: type_name = z.__class__.__name__ raise TypeError( "Object of type '{}' is no JSON serializable".format( type_name)) formatter = jsonlogger.JsonFormatter(json_default=encode_complex, json_encoder=json.JSONEncoder) self.logHandler.setFormatter(formatter) value = { "special": complex(3, 8), } self.logger.info(" message", extra=value) msg = self.buffer.getvalue() self.assertEqual(msg, '{"message": " message", "special": [3.0, 8.0]}\n')