11#!/usr/bin/python3
2- # vim: noexpandtab tabstop=4 shiftwidth=4 fileformat=unix
32# -*- coding: utf-8 -*-
3+ # vim: noexpandtab tabstop=4 shiftwidth=4 fileformat=unix
44
55# Syslog client (RFC3164, RFC5424) for Python
66#
@@ -83,11 +83,13 @@ def datetime2rfc3339(dt):
8383return "%s%s" % (dt .strftime ("%Y-%m-%dT%H:%M:%S.%f" ), tz )
8484
8585class SyslogClient :
86- def __init__ (self , server , port , proto = 'udp' , forceipv4 = False , clientname = None ):
86+ def __init__ (self , server , port , proto = 'udp' , forceipv4 = False , clientname = None , rfc = None , maxMessageLength = 1024 ):
87+ self .socket = None
8788self .server = server
8889self .port = port
8990self .proto = socket .SOCK_DGRAM
90- self .socket = None
91+ self .rfc = rfc
92+ self .maxMessageLength = maxMessageLength
9193self .forceipv4 = forceipv4
9294
9395if proto != None :
@@ -144,15 +146,26 @@ def log(self, message, timestamp=None, hostname=None, facility=None, severity=No
144146def send (self , messagedata ):
145147if self .socket != None or self .connect ():
146148try :
147- self .socket .send (messagedata )
148- except BrokenPipeError as e :
149+ if self .maxMessageLength != None :
150+ self .socket .send (messagedata [:self .maxMessageLength ])
151+ else :
152+ self .socket .send (messagedata )
153+ except IOError as e :
149154self .close ()
150155
151156class SyslogClientRFC5424 (SyslogClient ):
152157def __init__ (self , server , port , proto = 'udp' , forceipv4 = False , clientname = None ):
153- SyslogClient .__init__ (self , server , port , proto , forceipv4 , clientname )
158+ SyslogClient .__init__ (self ,
159+ server = server ,
160+ port = port ,
161+ proto = proto ,
162+ forceipv4 = forceipv4 ,
163+ clientname = clientname ,
164+ rfc = '5424' ,
165+ maxMessageLength = None ,
166+ )
154167
155- def log (self , message , facility = None , severity = None , timestamp = None , hostname = None , version = 1 , appname = None , procid = None , msgid = None ):
168+ def log (self , message , facility = None , severity = None , timestamp = None , hostname = None , version = 1 , program = None , pid = None , msgid = None ):
156169
157170if facility == None :
158171facility = FAC_USER
@@ -177,15 +190,15 @@ def log(self, message, facility=None, severity=None, timestamp=None, hostname=No
177190else :
178191hostname_s = hostname
179192
180- if appname == None :
193+ if program == None :
181194appname_s = "-"
182195else :
183- appname_s = appname
196+ appname_s = program
184197
185- if procid == None :
198+ if pid == None :
186199procid_s = "-"
187200else :
188- procid_s = procid
201+ procid_s = pid
189202
190203if msgid == None :
191204msgid_s = "-"
@@ -207,9 +220,17 @@ def log(self, message, facility=None, severity=None, timestamp=None, hostname=No
207220
208221class SyslogClientRFC3164 (SyslogClient ):
209222def __init__ (self , server , port , proto = 'udp' , forceipv4 = False , clientname = None ):
210- SyslogClient .__init__ (self , server , port , proto , forceipv4 , clientname )
223+ SyslogClient .__init__ (self ,
224+ server = server ,
225+ port = port ,
226+ proto = proto ,
227+ forceipv4 = forceipv4 ,
228+ clientname = clientname ,
229+ rfc = '3164' ,
230+ maxMessageLength = 1024 ,
231+ )
211232
212- def log (self , message , facility = None , severity = None , timestamp = None , hostname = None ):
233+ def log (self , message , facility = None , severity = None , timestamp = None , hostname = None , program = "SyslogClient" , pid = None ):
213234if facility == None :
214235facility = FAC_USER
215236
@@ -233,10 +254,20 @@ def log(self, message, facility=None, severity=None, timestamp=None, hostname=No
233254else :
234255hostname_s = hostname
235256
236- d = "<%i>%s %s %s\n " % (
257+ tag_s = ""
258+ if tag == None :
259+ tag_s += "SyslogClient"
260+ else :
261+ tag_s += program
262+
263+ if pid != None :
264+ tag_s += "[%i]" % (pid )
265+
266+ d = "<%i>%s %s %s: %s\n " % (
237267pri ,
238268timestamp_s ,
239269hostname_s ,
270+ tag_s ,
240271message
241272)
242273
0 commit comments