Skip to content

Commit 92d5402

Browse files
committed
add missing tag/program fields for RFC3164
1 parent eb5d40c commit 92d5402

File tree

2 files changed

+50
-19
lines changed

2 files changed

+50
-19
lines changed

SyslogClient.py

Lines changed: 45 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
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):
8383
return "%s%s" % (dt.strftime("%Y-%m-%dT%H:%M:%S.%f"), tz)
8484

8585
class 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
8788
self.server = server
8889
self.port = port
8990
self.proto = socket.SOCK_DGRAM
90-
self.socket = None
91+
self.rfc = rfc
92+
self.maxMessageLength = maxMessageLength
9193
self.forceipv4 = forceipv4
9294

9395
if proto != None:
@@ -144,15 +146,26 @@ def log(self, message, timestamp=None, hostname=None, facility=None, severity=No
144146
def send(self, messagedata):
145147
if self.socket != None or self.connect():
146148
try:
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:
149154
self.close()
150155

151156
class SyslogClientRFC5424(SyslogClient):
152157
def __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

157170
if facility == None:
158171
facility = FAC_USER
@@ -177,15 +190,15 @@ def log(self, message, facility=None, severity=None, timestamp=None, hostname=No
177190
else:
178191
hostname_s = hostname
179192

180-
if appname == None:
193+
if program == None:
181194
appname_s = "-"
182195
else:
183-
appname_s = appname
196+
appname_s = program
184197

185-
if procid == None:
198+
if pid == None:
186199
procid_s = "-"
187200
else:
188-
procid_s = procid
201+
procid_s = pid
189202

190203
if msgid == None:
191204
msgid_s = "-"
@@ -207,9 +220,17 @@ def log(self, message, facility=None, severity=None, timestamp=None, hostname=No
207220

208221
class SyslogClientRFC3164(SyslogClient):
209222
def __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):
213234
if facility == None:
214235
facility = FAC_USER
215236

@@ -233,10 +254,20 @@ def log(self, message, facility=None, severity=None, timestamp=None, hostname=No
233254
else:
234255
hostname_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" % (
237267
pri,
238268
timestamp_s,
239269
hostname_s,
270+
tag_s,
240271
message
241272
)
242273

tests/SyslogTime.py

100644100755
Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
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
import sys, datetime, time
66
import SyslogClient
77

88
def print_help():
9-
print("%s : {tcp|udp}://<SERVER>:<PORT> [rfc5434|rfc3164]" % (sys.argv[0]))
9+
print("%s : {tcp|udp}://<SERVER>:<PORT> [rfc5424|rfc3164]" % (sys.argv[0]))
1010
sys.exit(0)
1111

1212
if __name__ == "__main__":
@@ -26,8 +26,8 @@ def print_help():
2626
port = int(args2[1])
2727

2828
if len(sys.argv) == 3:
29-
rfc = sys.argv[2]
30-
if rfc.upper() != "RFC3164" and rfc != "RFC5424":
29+
rfc = sys.argv[2].upper()
30+
if rfc != "RFC3164" and rfc != "RFC5424":
3131
print_help()
3232
else:
3333
rfc = "RFC3164"
@@ -41,7 +41,7 @@ def print_help():
4141
client = SyslogClient.SyslogClientRFC3164(host, port, proto=proto)
4242

4343
while True:
44-
client.log(u"the time is %s" % (datetime.datetime.now()), facility=SyslogClient.FAC_SYSLOG, severity=SyslogClient.SEV_DEBUG)
44+
client.log("the time is %s" % (datetime.datetime.now()), facility=SyslogClient.FAC_SYSLOG, severity=SyslogClient.SEV_DEBUG, program="time", pid=1)
4545
try:
4646
time.sleep(1)
4747
except KeyboardInterrupt as e:

0 commit comments

Comments
 (0)