diff --git a/logstash/__init__.py b/logstash/__init__.py index 0d25763..7f47f1d 100644 --- a/logstash/__init__.py +++ b/logstash/__init__.py @@ -1 +1,4 @@ -from handler import LogstashHandler \ No newline at end of file +try: + from handler import LogstashHandler +except ImportError: + from .handler import LogstashHandler \ No newline at end of file diff --git a/logstash/handler.py b/logstash/handler.py index e38440e..6fac606 100644 --- a/logstash/handler.py +++ b/logstash/handler.py @@ -1,6 +1,7 @@ import json import traceback import socket +import sys from logging.handlers import DatagramHandler from datetime import datetime @@ -22,7 +23,10 @@ def __init__(self, host, port=5959, message_type='logstash', def makePickle(self, record): message_dict = self.build_message(record) - return json.dumps(message_dict) + if sys.version_info < (3, 0): + return json.dumps(message_dict) + else: + return bytes(json.dumps(message_dict), 'utf-8') def build_message(self, record): add_debug_info = False @@ -75,9 +79,14 @@ def add_extra_fields(self, message_dict, record): 'msecs', 'msecs', 'message', 'msg', 'name', 'pathname', 'process', 'processName', 'relativeCreated', 'thread', 'threadName') + if sys.version_info < (3, 0): + easy_types = (basestring, bool, dict, float, int, list, type(None)) + else: + easy_types = (str, bool, dict, float, int, list, type(None)) + for key, value in record.__dict__.items(): if key not in skip_list: - if isinstance(value, (basestring, bool, dict, float, int, list, type(None))): + if isinstance(value, easy_types): message_dict['@fields'][key] = value else: message_dict['@fields'][key] = repr(value)