update pubsublogger with the last version

pull/8/head
Starow 2014-08-07 14:49:34 +02:00
parent c10003a630
commit 97f3a3df9e
1 changed files with 29 additions and 17 deletions

View File

@ -11,13 +11,16 @@ To use this module, you have to define at least a channel name.
import redis import redis
from logbook import Logger from logbook import Logger
import ConfigParser import ConfigParser
from logbook import NestedSetup, NullHandler, FileHandler, MailHandler from logbook import NestedSetup
from logbook import NullHandler
from logbook import TimedRotatingFileHandler
from logbook import MailHandler
import os import os
# use a TCP Socket by default # use a TCP Socket by default
use_tcp_socket = True use_tcp_socket = True
#default config for a UNIX socket # default config for a UNIX socket
unix_socket = '/tmp/redis.sock' unix_socket = '/tmp/redis.sock'
# default config for a TCP socket # default config for a TCP socket
hostname = 'localhost' hostname = 'localhost'
@ -32,7 +35,8 @@ smtp_server = None
smtp_port = 0 smtp_port = 0
src_server = None src_server = None
def setup(name, path = 'log', enable_debug = False):
def setup(name, path='log', enable_debug=False):
""" """
Prepare a NestedSetup. Prepare a NestedSetup.
@ -43,39 +47,46 @@ def setup(name, path = 'log', enable_debug = False):
:return a nested Setup :return a nested Setup
""" """
path_tmpl = os.path.join(path, '{name}_{level}.log') path_tmpl = os.path.join(path, '{name}_{level}.log')
info = path_tmpl.format(name = name, level = 'info') info = path_tmpl.format(name=name, level='info')
warn = path_tmpl.format(name = name, level = 'warn') warn = path_tmpl.format(name=name, level='warn')
err = path_tmpl.format(name = name, level = 'err') err = path_tmpl.format(name=name, level='err')
crit = path_tmpl.format(name = name, level = 'crit') crit = path_tmpl.format(name=name, level='crit')
# a nested handler setup can be used to configure more complex setups # a nested handler setup can be used to configure more complex setups
setup = [ setup = [
# make sure we never bubble up to the stderr handler # make sure we never bubble up to the stderr handler
# if we run out of setup handling # if we run out of setup handling
NullHandler(), NullHandler(),
# then write messages that are at least info to to a logfile # then write messages that are at least info to to a logfile
FileHandler(info, level='INFO', encoding='utf-8'), TimedRotatingFileHandler(info, level='INFO', encoding='utf-8',
date_format='%Y-%m-%d'),
# then write messages that are at least warnings to to a logfile # then write messages that are at least warnings to to a logfile
FileHandler(warn, level='WARNING', encoding='utf-8'), TimedRotatingFileHandler(warn, level='WARNING', encoding='utf-8',
date_format='%Y-%m-%d'),
# then write messages that are at least errors to to a logfile # then write messages that are at least errors to to a logfile
FileHandler(err, level='ERROR', encoding='utf-8'), TimedRotatingFileHandler(err, level='ERROR', encoding='utf-8',
date_format='%Y-%m-%d'),
# then write messages that are at least critical errors to to a logfile # then write messages that are at least critical errors to to a logfile
FileHandler(crit, level='CRITICAL', encoding='utf-8'), TimedRotatingFileHandler(crit, level='CRITICAL', encoding='utf-8',
date_format='%Y-%m-%d'),
] ]
if enable_debug: if enable_debug:
debug = path_tmpl.format(name = name, level = 'debug') debug = path_tmpl.format(name=name, level='debug')
setup.insert(1, FileHandler(debug, level='DEBUG', encoding='utf-8')) setup.insert(1, TimedRotatingFileHandler(debug, level='DEBUG',
encoding='utf-8', date_format='%Y-%m-%d'))
if src_server is not None and smtp_server is not None \ if src_server is not None and smtp_server is not None \
and smtp_port != 0 and len(dest_mails) != 0: and smtp_port != 0 and len(dest_mails) != 0:
mail_tmpl = '{name}_error@{src}' mail_tmpl = '{name}_error@{src}'
from_mail = mail_tmpl.format(name = name, src = src_server) from_mail = mail_tmpl.format(name=name, src=src_server)
subject = 'Error in {}'.format(name) subject = 'Error in {}'.format(name)
# errors should then be delivered by mail and also be kept # errors should then be delivered by mail and also be kept
# in the application log, so we let them bubble up. # in the application log, so we let them bubble up.
setup.append(MailHandler(from_mail, dest_mails, subject, setup.append(MailHandler(from_mail, dest_mails, subject,
level='ERROR', bubble=True, server_addr=(smtp_server, smtp_port))) level='ERROR', bubble=True,
server_addr=(smtp_server, smtp_port)))
return NestedSetup(setup) return NestedSetup(setup)
def mail_setup(path): def mail_setup(path):
""" """
Set the variables to be able to send emails. Set the variables to be able to send emails.
@ -93,7 +104,8 @@ def mail_setup(path):
smtp_port = config.get('mail', 'smtp_port') smtp_port = config.get('mail', 'smtp_port')
src_server = config.get('mail', 'src_server') src_server = config.get('mail', 'src_server')
def run(log_name, path, debug = False, mail = None):
def run(log_name, path, debug=False, mail=None):
""" """
Run a subscriber and pass the messages to the logbook setup. Run a subscriber and pass the messages to the logbook setup.
Stays alive as long as the pubsub instance listen to something. Stays alive as long as the pubsub instance listen to something.
@ -110,7 +122,7 @@ def run(log_name, path, debug = False, mail = None):
if use_tcp_socket: if use_tcp_socket:
r = redis.StrictRedis(host=hostname, port=port) r = redis.StrictRedis(host=hostname, port=port)
else: else:
r = redis.StrictRedis(unix_socket_path = unix_socket) r = redis.StrictRedis(unix_socket_path=unix_socket)
pubsub = r.pubsub() pubsub = r.pubsub()
pubsub.psubscribe(channel + '.*') pubsub.psubscribe(channel + '.*')