Skip to content
This repository was archived by the owner on Dec 21, 2024. It is now read-only.

Commit 418788d

Browse files
authored
Merge pull request #63 from Savier/ensure_ascii
add ensure_ascii parameter to propagate it to json.dumps
2 parents eebe45e + af5778d commit 418788d

File tree

2 files changed

+22
-1
lines changed

2 files changed

+22
-1
lines changed

src/pythonjsonlogger/jsonlogger.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ def __init__(self, *args, **kwargs):
9090
that will be used to customize the indent of the output json.
9191
:param prefix: an optional string prefix added at the beginning of
9292
the formatted string
93+
:param json_indent: indent parameter for json.dumps
94+
:param json_ensure_ascii: ensure_ascii parameter for json.dumps
9395
:param reserved_attrs: an optional list of fields that will be skipped when
9496
outputting json log record. Defaults to all log record attributes:
9597
http://docs.python.org/library/logging.html#logrecord-attributes
@@ -102,6 +104,7 @@ def __init__(self, *args, **kwargs):
102104
self.json_encoder = kwargs.pop("json_encoder", None)
103105
self.json_serializer = kwargs.pop("json_serializer", json.dumps)
104106
self.json_indent = kwargs.pop("json_indent", None)
107+
self.json_ensure_ascii = kwargs.pop("json_ensure_ascii", True)
105108
self.prefix = kwargs.pop("prefix", "")
106109
reserved_attrs = kwargs.pop("reserved_attrs", RESERVED_ATTRS)
107110
self.reserved_attrs = dict(zip(reserved_attrs, reserved_attrs))
@@ -152,7 +155,8 @@ def jsonify_log_record(self, log_record):
152155
return self.json_serializer(log_record,
153156
default=self.json_default,
154157
cls=self.json_encoder,
155-
indent=self.json_indent)
158+
indent=self.json_indent,
159+
ensure_ascii=self.json_ensure_ascii)
156160

157161
def format(self, record):
158162
"""Formats a log record and serializes to json"""

tests/tests.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# -*- coding: utf-8 -*-
12
import unittest
23
import logging
34
import json
@@ -173,6 +174,22 @@ def testExcInfo(self):
173174
logJson = json.loads(self.buffer.getvalue())
174175
self.assertEqual(logJson.get("exc_info"), expected_value)
175176

177+
def testEnsureAsciiTrue(self):
178+
fr = jsonlogger.JsonFormatter()
179+
self.logHandler.setFormatter(fr)
180+
self.logger.info('Привет')
181+
msg = self.buffer.getvalue().split('"message": "', 1)[1].split('"', 1)[0]
182+
self.assertEqual(msg, r"\u041f\u0440\u0438\u0432\u0435\u0442")
183+
184+
def testEnsureAsciiFalse(self):
185+
fr = jsonlogger.JsonFormatter(json_ensure_ascii=False)
186+
self.logHandler.setFormatter(fr)
187+
self.logger.info('Привет')
188+
msg = self.buffer.getvalue().split('"message": "', 1)[1].split('"', 1)[0]
189+
self.assertEqual(msg, "Привет")
190+
191+
192+
176193
if __name__ == '__main__':
177194
if len(sys.argv[1:]) > 0:
178195
if sys.argv[1] == 'xml':

0 commit comments

Comments
 (0)