From f248c460f2dd8a203cb64700fb7b8c42a94a81ed Mon Sep 17 00:00:00 2001 From: Cyril Jaquier Date: Sun, 6 Aug 2006 21:24:06 +0000 Subject: [PATCH] - Improved logging in server - Added logtarget option git-svn-id: https://fail2ban.svn.sourceforge.net/svnroot/fail2ban/trunk@263 a942ae1a-1317-0410-a47c-b1dcaea8d605 --- client/fail2banreader.py | 5 ++++- config/fail2ban.conf | 1 + server/server.py | 31 ++++++++++++++++++++++++++++++- server/transmitter.py | 4 ++++ 4 files changed, 39 insertions(+), 2 deletions(-) diff --git a/client/fail2banreader.py b/client/fail2banreader.py index eebd8827..8a210d57 100644 --- a/client/fail2banreader.py +++ b/client/fail2banreader.py @@ -39,7 +39,8 @@ class Fail2banReader(ConfigReader): ConfigReader.read(self, "fail2ban") def getOptions(self): - opts = [["int", "loglevel", 1]] + opts = [["int", "loglevel", 1], + ["string", "logtarget", "STDERR"]] self.opts = ConfigReader.getOptions(self, "Definition", opts) def convert(self): @@ -47,5 +48,7 @@ class Fail2banReader(ConfigReader): for opt in self.opts: if opt == "loglevel": stream.append(["set", "loglevel", self.opts[opt]]) + elif opt == "logtarget": + stream.append(["set", "logtarget", self.opts[opt]]) return stream \ No newline at end of file diff --git a/config/fail2ban.conf b/config/fail2ban.conf index c4028d54..0e34c456 100644 --- a/config/fail2ban.conf +++ b/config/fail2ban.conf @@ -9,3 +9,4 @@ loglevel = 3 +logtarget = /var/log/fail2ban.log diff --git a/server/server.py b/server/server.py index ba9bc060..08dfff20 100644 --- a/server/server.py +++ b/server/server.py @@ -26,7 +26,7 @@ __license__ = "GPL" from jail import Jail from transmitter import Transmitter -import locale, logging +import locale, logging, sys # Gets the instance of the logger. logSys = logging.getLogger("fail2ban.server") @@ -37,8 +37,10 @@ class Server: self.jails = dict() self.transm = Transmitter(self) self.logLevel = 3 + self.logTarget = "STDERR" # Set logging level self.setLogLevel(self.logLevel) + self.setLogTarget(self.logTarget) def start(self): # Start the communication @@ -322,6 +324,33 @@ class Server: def getLogLevel(self): return self.logLevel + + def setLogTarget(self, target): + # Remove previous handler + logging.getLogger("fail2ban").handlers = [] + self.logTarget = target + if target == "SYSLOG": + logSys.error("Not yet implemented") + return False + elif target == "STDERR": + hdlr = logging.StreamHandler(sys.stderr) + else: + # Target should be a file + try: + open(target, "a") + hdlr = logging.FileHandler(target) + except IOError: + logSys.error("Unable to log to " + target) + return False + # set a format which is simpler for console use + formatter = logging.Formatter('%(name)-16s: %(levelname)-6s %(message)s') + # tell the handler to use this format + hdlr.setFormatter(formatter) + logging.getLogger("fail2ban").addHandler(hdlr) + return True + + def getLogTarget(self): + return self.logTarget class ServerUnknownJail(Exception): pass \ No newline at end of file diff --git a/server/transmitter.py b/server/transmitter.py index 9ff3e92c..a2653bf8 100644 --- a/server/transmitter.py +++ b/server/transmitter.py @@ -103,6 +103,10 @@ class Transmitter: value = int(action[1]) self.server.setLogLevel(value) return self.server.getLogLevel() + elif name == "logtarget": + value = action[1] + self.server.setLogTarget(value) + return self.server.getLogTarget() # Jail elif action[1] == "idle": if action[2] == "on":