From a92e6d350549cfa7a76a4e0a4891816c8a240e35 Mon Sep 17 00:00:00 2001 From: Mark Eschbach Date: Mon, 22 May 2017 08:20:39 -0700 Subject: [PATCH 1/2] Adds framing strategy for octect-counting frames --- syslogssl.py | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/syslogssl.py b/syslogssl.py index c1de46a..a65c1f3 100755 --- a/syslogssl.py +++ b/syslogssl.py @@ -8,6 +8,20 @@ import socket +class NewLineFraming: + + def frame( self, message ): + return message + '\n' + + +class OctectCountingFraming: + + def frame( self, message ): + length = len( message ) + frame = str( length ) + " " + message + return frame + + class SSLSysLogHandler(logging.handlers.SysLogHandler): # We need to paste all this in because __init__ bitches otherwise @@ -97,6 +111,8 @@ class SSLSysLogHandler(logging.handlers.SysLogHandler): "CRITICAL" : "critical" } + framing_strategy = NewLineFraming() + def __init__(self, address, certs=None, facility=LOG_USER): @@ -123,7 +139,7 @@ def close(self): def emit(self, record): - msg = self.format(record) + '\n' + msg = self.format(record) prio = '<%d>' % self.encodePriority(self.facility, self.mapPriority(record.levelname)) if type(msg) is unicode: @@ -131,8 +147,9 @@ def emit(self, record): if codecs: msg = codecs.BOM_UTF8 + msg msg = prio + msg + framed_message = self.framing_strategy.frame(msg) try: - self.socket.write(msg) + self.socket.write( framed_message ) except(KeyboardInterrupt, SystemExit): raise except: @@ -142,8 +159,9 @@ def emit(self, record): ### Example Usage ### if __name__ == '__main__': - host = 'logs.papertrailapp.com' - port = 514 # default, you'll want to change this + import os + host = os.getenv( 'SYSLOG_HOST', 'logs.papertrailapp.com' ) + port = int( os.getenv( 'SYSLOG_PORT', '514' ) ) # default, you'll want to change this address = (host, port) # We don't want this to hang From 583d964703ff7b76efc5e33c70070fd43991fb62 Mon Sep 17 00:00:00 2001 From: Mark Eschbach Date: Mon, 22 May 2017 08:25:37 -0700 Subject: [PATCH 2/2] Fixes mispelling of Octet --- syslogssl.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syslogssl.py b/syslogssl.py index a65c1f3..56e4f08 100755 --- a/syslogssl.py +++ b/syslogssl.py @@ -14,7 +14,7 @@ def frame( self, message ): return message + '\n' -class OctectCountingFraming: +class OctetCountingFraming: def frame( self, message ): length = len( message )