1. 程式人生 > >Python中syslog功能程式碼

Python中syslog功能程式碼

在我們日常工作中,我們需要從Windows系統上傳送syslog訊息到syslog伺服器。下面的程式碼能夠工作的很好。

#!/usr/bin/python

# -*- encoding: iso-8859-1 -*-

"""

Python syslog client.

This code is placed in the public domain bythe 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 pythoninstallation.

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

Note that if you intend to send messages toremote servers, their

syslogd must be started with -r to allow toreceive UDP from

the network.

"""

import socket

# I'm a python novice, so I don't know ofbetter 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):

       """

       Sendsyslog 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()

示例用法:

from syslog import syslog

syslog('There were zwei peanuts walking downder strasse...', host='brit.ain')

為了讓它工作,你必須確保syslog服務接收遠端訊息。你能通過使用-r選項啟動syslogd。

我也喜歡Pyton docstring有多麼的好,例如:

$ 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

    getany syslog module in the default python installation.

    SeeRFC3164 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

    thenetwork.

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...

>>>