Contents

  1. Python syslog source
  2. Comments

License

Creative Commons License
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License.
Valid XHTML 1.0 Strict

Python syslog source (for win32 systems)

Written by Christian Stigen Larsen

License

Creative Commons License
This work is licensed under a Creative Commons Attribution-Share Alike 3.0 Unported License.

In my day to day job, I often need to send syslog messages from a Windows box to a syslog server. The code below works nicely.

You can download the code: syslog.py

#!/usr/bin/python
# -*- encoding: iso-8859-1 -*-

"""
Python syslog client.

This code is placed in the public domain by the author.
Written by Christian Stigen Larsen.

This is especially neat for Windows users, who (I think) don't
get any syslog module in the default python installation.

See RFC3164 for more info -- http://tools.ietf.org/html/rfc3164

Note that if you intend to send messages to remote servers, their
syslogd must be started with -r to allow to receive UDP from
the network.
"""

import socket

# I'm a python novice, so I don't know of better ways to define enums

FACILITY = {
	'kern': 0, 'user': 1, 'mail': 2, 'daemon': 3,
	'auth': 4, 'syslog': 5, 'lpr': 6, 'news': 7,
	'uucp': 8, 'cron': 9, 'authpriv': 10, 'ftp': 11,
	'local0': 16, 'local1': 17, 'local2': 18, 'local3': 19,
	'local4': 20, 'local5': 21, 'local6': 22, 'local7': 23,
}

LEVEL = {
	'emerg': 0, 'alert':1, 'crit': 2, 'err': 3,
	'warning': 4, 'notice': 5, 'info': 6, 'debug': 7
}

def syslog(message, level=LEVEL['notice'], facility=FACILITY['daemon'],
	host='localhost', port=514):

	"""
	Send syslog UDP packet to given host and port.
	"""

	sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
	data = '<%d>%s' % (level + facility*8, message)
	sock.sendto(data, (host, port))
	sock.close()

Example usage:

from syslog import syslog
syslog('There were zwei peanuts walking down der strasse...', host='brit.ain')

For this to work, you have to be sure that the syslog server accepts remote messages. This can usually be done by starting syslogd with the option -r.

I also love how great python docstrings are. For instance:

$ python
Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import syslog
>>> help(syslog)
Help on module syslog:

NAME
    syslog - Python syslog client.

FILE
    c:\documents and settings\csl\jall\syslog.py

DESCRIPTION
    This code is placed in the public domain by the author.
    Written by Christian Stigen Larsen.

    This is especially neat for Windows users, who (I think) don't
    get any syslog module in the default python installation.

    See RFC3164 for more info -- http://tools.ietf.org/html/rfc3164

    Note that if you intend to send messages to remote servers, their
    syslogd must be started with -r to allow to receive UDP from
    the network.

FUNCTIONS
    syslog(message, level=5, facility=3, host='localhost', port=514)
        Send syslog UDP packet to given host and port.

DATA
    FACILITY = {'auth': 4, 'authpriv': 10, 'cron': 9, 'daemon': 3, 'ftp': ...
    LEVEL = {'alert': 1, 'crit': 2, 'debug': 7, 'emerg': 0, 'err': 3, 'inf...


>>>

 

blog comments powered by Disqus