1
# Copyright (C) 2004,2005 PreludeIDS Technologies. All Rights Reserved.
2
# Author: Yoann Vandoorselaere <yoann.v@prelude-ids.com>
4
# This file is part of the Prewikka program.
6
# This program is free software; you can redistribute it and/or modify
7
# it under the terms of the GNU General Public License as published by
8
# the Free Software Foundation; either version 2, or (at your option)
11
# This program is distributed in the hope that it will be useful,
12
# but WITHOUT ANY WARRANTY; without even the implied warranty of
13
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
# GNU General Public License for more details.
16
# You should have received a copy of the GNU General Public License
17
# along with this program; see the file COPYING. If not, write to
18
# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
21
import logging, logging.handlers, sys
26
WARNING = logging.WARNING
27
CRITICAL = logging.CRITICAL
30
def __init__(self, conf):
33
for logconf in conf.logs:
34
logtype = logconf.keys()[0]
37
for key in logconf[logtype].keys():
38
config[key] = logconf[logtype].getOptionValue(key)
40
self._logger = logging.getLogger()
41
self._logger.setLevel(logging.NOTSET)
42
self._logger.addHandler(self._getHandler(config, logtype))
45
def _getHandler(self, config, logtype='syslog'):
46
logtype = logtype.lower()
47
level = config.get("level", "")
50
hdlr = logging.FileHandler(config["file"])
52
elif logtype == 'nteventlog':
53
hdlr = logging.handlers.NTEventLogHandler(logid, logtype='Application')
55
elif logtype in ['syslog', 'unix']:
56
hdlr = logging.handlers.SysLogHandler('/dev/log')
58
elif logtype in ['smtp']:
59
hdlr = logging.handlers.SMTPHandler(config["host"], config["from"], config["to"].split(", "), config["subject"])
61
elif logtype in ['stderr']:
62
hdlr = logging.StreamHandler(sys.stderr)
65
raise _("Unknown logtype specified: '%s'") % logtype
67
format = 'Prewikka %(levelname)s: %(message)s'
68
if logtype in ['file', 'stderr']:
69
format = '%(asctime)s ' + format
72
if logtype == 'stderr':
76
if level in ['DEBUG', 'ALL']:
77
hdlr.setLevel(logging.DEBUG)
79
hdlr.setLevel(logging.INFO)
80
elif level == 'ERROR':
81
hdlr.setLevel(logging.ERROR)
82
elif level == 'CRITICAL':
83
hdlr.setLevel(logging.CRITICAL)
85
hdlr.setLevel(logging.WARNING)
87
formatter = logging.Formatter(format, datefmt)
88
hdlr.setFormatter(formatter)
93
def _getLog(self, request, login, details):
96
addr = request.getClientAddr()
97
message += "%s" % (addr)
99
port = request.getClientPort()
101
message += ":%d" % port
104
message += " %s@" % (login)
108
message += "%s]" % (request.getView())
111
message += " " + details
115
def debug(self, message, request=None, user=None):
117
self._logger.debug(self._getLog(request, user, message))
119
def info(self, message, request=None, user=None):
121
self._logger.info(self._getLog(request, user, message))
123
def warning(self, message, request=None, user=None):
125
self._logger.warning(self._getLog(request, user, message))
127
def error(self, message, request=None, user=None):
129
self._logger.error(self._getLog(request, user, message))
131
def critical(self, message, request=None, user=None):
133
self._logger.critical(self._getLog(request, user, message))
135
def log(self, priority, message, request=None, user=None):
136
return { DEBUG: self.debug,
138
WARNING: self.warning,
140
CRITICAL: self.critical }[priority](message, request, user)