From ae0fca5822db601e371e87df21d00f91df9b422f Mon Sep 17 00:00:00 2001 From: "arthur.yueh" Date: Tue, 23 Feb 2021 10:28:48 +0800 Subject: [PATCH 1/3] feat: Add json "ensure_ascii" setting in ContainerEngineHandler MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To allow unicodes to show in log instead of ascii character (for example, show chinese word '哈' in log instead of '\u8bed') --- google/cloud/logging_v2/handlers/_helpers.py | 4 ++-- google/cloud/logging_v2/handlers/container_engine.py | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/google/cloud/logging_v2/handlers/_helpers.py b/google/cloud/logging_v2/handlers/_helpers.py index fff1e9a89..507a6be34 100644 --- a/google/cloud/logging_v2/handlers/_helpers.py +++ b/google/cloud/logging_v2/handlers/_helpers.py @@ -33,7 +33,7 @@ _PROTOCOL_HEADER = "SERVER_PROTOCOL" -def format_stackdriver_json(record, message): +def format_stackdriver_json(record, message, json_ensure_ascii): """Helper to format a LogRecord in in Stackdriver fluentd format. Returns: @@ -48,7 +48,7 @@ def format_stackdriver_json(record, message): "severity": record.levelname, } - return json.dumps(payload) + return json.dumps(payload, ensure_ascii=json_ensure_ascii) def get_request_data_from_flask(): diff --git a/google/cloud/logging_v2/handlers/container_engine.py b/google/cloud/logging_v2/handlers/container_engine.py index a4bd0f848..1a8f4edb4 100644 --- a/google/cloud/logging_v2/handlers/container_engine.py +++ b/google/cloud/logging_v2/handlers/container_engine.py @@ -31,7 +31,7 @@ class ContainerEngineHandler(logging.StreamHandler): (GKE) fluentd plugin, so that metadata such as log level are properly set. """ - def __init__(self, *, name=None, stream=None): + def __init__(self, *, name=None, stream=None, json_ensure_ascii=True): """ Args: name (Optional[str]): The name of the custom log in Cloud Logging. @@ -40,6 +40,7 @@ def __init__(self, *, name=None, stream=None): """ super(ContainerEngineHandler, self).__init__(stream=stream) self.name = name + self.json_ensure_ascii = json_ensure_ascii def format(self, record): """Format the message into JSON expected by fluentd. @@ -51,4 +52,4 @@ def format(self, record): str: A JSON string formatted for GKE fluentd. """ message = super(ContainerEngineHandler, self).format(record) - return format_stackdriver_json(record, message) + return format_stackdriver_json(record, message, self.json_ensure_ascii) From 93be238def2664f0a2f5ca0b7b1e7df4a1f95655 Mon Sep 17 00:00:00 2001 From: "arthur.yueh" Date: Sat, 6 Mar 2021 17:23:17 +0800 Subject: [PATCH 2/3] refactor: modify codes as review suggests --- google/cloud/logging_v2/handlers/_helpers.py | 4 ++-- google/cloud/logging_v2/handlers/container_engine.py | 5 ++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/google/cloud/logging_v2/handlers/_helpers.py b/google/cloud/logging_v2/handlers/_helpers.py index 507a6be34..88eba07a6 100644 --- a/google/cloud/logging_v2/handlers/_helpers.py +++ b/google/cloud/logging_v2/handlers/_helpers.py @@ -33,7 +33,7 @@ _PROTOCOL_HEADER = "SERVER_PROTOCOL" -def format_stackdriver_json(record, message, json_ensure_ascii): +def format_stackdriver_json(record, message): """Helper to format a LogRecord in in Stackdriver fluentd format. Returns: @@ -48,7 +48,7 @@ def format_stackdriver_json(record, message, json_ensure_ascii): "severity": record.levelname, } - return json.dumps(payload, ensure_ascii=json_ensure_ascii) + return json.dumps(payload, ensure_ascii=False) def get_request_data_from_flask(): diff --git a/google/cloud/logging_v2/handlers/container_engine.py b/google/cloud/logging_v2/handlers/container_engine.py index 1a8f4edb4..a4bd0f848 100644 --- a/google/cloud/logging_v2/handlers/container_engine.py +++ b/google/cloud/logging_v2/handlers/container_engine.py @@ -31,7 +31,7 @@ class ContainerEngineHandler(logging.StreamHandler): (GKE) fluentd plugin, so that metadata such as log level are properly set. """ - def __init__(self, *, name=None, stream=None, json_ensure_ascii=True): + def __init__(self, *, name=None, stream=None): """ Args: name (Optional[str]): The name of the custom log in Cloud Logging. @@ -40,7 +40,6 @@ def __init__(self, *, name=None, stream=None, json_ensure_ascii=True): """ super(ContainerEngineHandler, self).__init__(stream=stream) self.name = name - self.json_ensure_ascii = json_ensure_ascii def format(self, record): """Format the message into JSON expected by fluentd. @@ -52,4 +51,4 @@ def format(self, record): str: A JSON string formatted for GKE fluentd. """ message = super(ContainerEngineHandler, self).format(record) - return format_stackdriver_json(record, message, self.json_ensure_ascii) + return format_stackdriver_json(record, message) From 3ac637a76f6ee6800947de2508ec2c3193413bf0 Mon Sep 17 00:00:00 2001 From: "arthur.yueh" Date: Sun, 7 Mar 2021 15:42:55 +0800 Subject: [PATCH 3/3] feat: unittest of json ensure_ascii test --- tests/unit/handlers/test_container_engine.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/unit/handlers/test_container_engine.py b/tests/unit/handlers/test_container_engine.py index d2ae83881..280ab9cf0 100644 --- a/tests/unit/handlers/test_container_engine.py +++ b/tests/unit/handlers/test_container_engine.py @@ -40,7 +40,7 @@ def test_format(self): handler = self._make_one() logname = "loggername" - message = "hello world" + message = "hello world,嗨 世界" record = logging.LogRecord( logname, logging.INFO, None, None, message, None, None ) @@ -53,4 +53,4 @@ def test_format(self): } payload = handler.format(record) - self.assertEqual(payload, json.dumps(expected_payload)) + self.assertEqual(payload, json.dumps(expected_payload, ensure_ascii=False))