diff options
author | Aravinda VK <avishwan@redhat.com> | 2013-09-19 14:24:35 +0530 |
---|---|---|
committer | Anand Avati <avati@redhat.com> | 2013-10-03 21:26:00 -0700 |
commit | 79ba7b3e2ea6e2dc2e720c2cae1e6ae0aeeea392 (patch) | |
tree | 24798543ab6d7f8e503b2dff309293012b51bd6c /geo-replication | |
parent | a65d64e89c96b52b9805b63afbbc3e7b67dbc3ad (diff) |
geo-rep: logrotate: Logrotate handling
In existing georep logrotate was implemented by handling SIGSTOP
and SIGCONT, gsyncd was failing to start again after SIGSTOP.
New approach uses WatchedFileHandler in logging, which tracks the
log file changes or logrotate. Reopens the log file if logrotate is
triggered or if same log file is updated from other process.
As per python doc:
http://docs.python.org/2/library/logging.handlers.html:
The WatchedFileHandler class, located in the logging.handlers module,
is a FileHandler which watches the file it is logging to. If the file
changes, it is closed and reopened using the file name.
A file change can happen because of usage of programs such as newsyslog
and logrotate which perform log file rotation. This handler, intended
for use under Unix/Linux, watches the file to see if it has changed
since the last emit. (A file is deemed to have changed if its device
or inode have changed.) If the file has changed, the old file stream
is closed, and the file opened to get a new stream.
Change-Id: I30f65eb1e9778b12943d6e43b60a50344a7885c6
BUG: 1012776
Signed-off-by: Aravinda VK <avishwan@redhat.com>
Reviewed-on: http://review.gluster.org/5968
Reviewed-by: Amar Tumballi <amarts@redhat.com>
Reviewed-by: Harshavardhana <harsha@harshavardhana.net>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Anand Avati <avati@redhat.com>
Diffstat (limited to 'geo-replication')
-rw-r--r-- | geo-replication/syncdaemon/gsyncd.py | 21 | ||||
-rw-r--r-- | geo-replication/syncdaemon/monitor.py | 13 |
2 files changed, 19 insertions, 15 deletions
diff --git a/geo-replication/syncdaemon/gsyncd.py b/geo-replication/syncdaemon/gsyncd.py index b460c6c6dbc..7fcc3165ac9 100644 --- a/geo-replication/syncdaemon/gsyncd.py +++ b/geo-replication/syncdaemon/gsyncd.py @@ -12,7 +12,7 @@ import optparse import fcntl import fnmatch from optparse import OptionParser, SUPPRESS_HELP -from logging import Logger +from logging import Logger, handlers from errno import EEXIST, ENOENT from ipaddr import IPAddress, IPNetwork @@ -58,7 +58,24 @@ class GLogger(Logger): logging.root = cls("root", lvl) logging.setLoggerClass(cls) logging.getLogger().handlers = [] - logging.basicConfig(**lprm) + logging.getLogger().setLevel(lprm['level']) + + if 'filename' in lprm: + try: + logging_handler = handlers.WatchedFileHandler(lprm['filename']) + formatter = logging.Formatter(fmt=lprm['format'], + datefmt=lprm['datefmt']) + logging_handler.setFormatter(formatter) + logging.getLogger().addHandler(logging_handler) + except AttributeError: + # Python version < 2.6 will not have WatchedFileHandler + # so fallback to logging without any handler. + # Note: logrotate will not work if Python version is < 2.6 + logging.basicConfig(**lprm) + else: + # If filename not passed(not available in lprm) then it may be + # streaming.(Ex: {"stream": "/dev/stdout"}) + logging.basicConfig(**lprm) @classmethod def _gsyncd_loginit(cls, **kw): diff --git a/geo-replication/syncdaemon/monitor.py b/geo-replication/syncdaemon/monitor.py index f6c79753d35..0c3a42fa6b7 100644 --- a/geo-replication/syncdaemon/monitor.py +++ b/geo-replication/syncdaemon/monitor.py @@ -176,19 +176,6 @@ class Monitor(object): return ret def multiplex(self, wspx, suuid): - def sigcont_handler(*a): - """ - Re-init logging and send group kill signal - """ - md = gconf.log_metadata - logging.shutdown() - lcls = logging.getLoggerClass() - lcls.setup(label=md.get('saved_label'), **md) - pid = os.getpid() - os.kill(-pid, signal.SIGUSR1) - signal.signal(signal.SIGUSR1, lambda *a: ()) - signal.signal(signal.SIGCONT, sigcont_handler) - argv = sys.argv[:] for o in ('-N', '--no-daemon', '--monitor'): while o in argv: |