Remove broken syslog logging.

Logging to syslog was erratic. Child would either double
log entries, or nothing at all. By preserving the file
handles used by the logger, we can pass it safely along
to the child process. Parent will exit, so this should
be safe.
This commit is contained in:
David Shrewsbury
2012-10-02 13:19:43 -04:00
parent 327bfc653f
commit de9bc8f201
3 changed files with 18 additions and 57 deletions

View File

@@ -134,14 +134,6 @@ class Options(object):
),
help='log file to use (ignored with --nodaemon)'
)
self.parser.add_argument(
'--syslog', dest='syslog', action='store_true',
help='use syslog for logging output'
)
self.parser.add_argument(
'--syslog-socket', dest='syslog_socket',
help='socket to use for syslog connection if UDP not supported'
)
self.parser.add_argument(
'--user', dest='user',
help='user to use for daemon mode'
@@ -175,20 +167,7 @@ def setup_logging(name, args):
'%(asctime)-6s: %(name)s - %(levelname)s - %(message)s'
)
# No timestamp, used with syslog
simple_formatter = logging.Formatter(
'%(name)s - %(levelname)s - %(message)s'
)
if args.syslog and not args.nodaemon:
if args.syslog_socket:
address = args.syslog_socket
else:
address = ('localhost', 514)
handler = logging.handlers.SysLogHandler(address=address,
facility="daemon")
handler.setFormatter(simple_formatter)
elif logfile:
if logfile:
handler = logging.FileHandler(logfile)
handler.setFormatter(ts_formatter)
else:

View File

@@ -24,15 +24,11 @@ from libra.common.options import Options, setup_logging
class Server(object):
def __init__(self, nodes):
def __init__(self, logger, nodes):
self.logger = logger
self.nodes = nodes
def main(self, logger=None, args=None):
if logger:
self.logger = logger
else:
self.logger = setup_logging('libra_mgm', args)
def main(self):
self.logger.info(
'Libra Pool Manager started with a float of {nodes} nodes'
.format(nodes=self.nodes)
@@ -64,15 +60,16 @@ def main():
args = options.run()
logger = setup_logging('libra_mgm', args)
server = Server(args.nodes)
server = Server(logger, args.nodes)
if args.nodaemon:
server.main(logger=logger)
server.main()
else:
context = daemon.DaemonContext(
working_directory='/etc/haproxy',
umask=0o022,
pidfile=lockfile.FileLock(args.pid)
pidfile=lockfile.FileLock(args.pid),
files_preserve=[logger.handlers[0].stream]
)
if args.user:
try:
@@ -87,6 +84,6 @@ def main():
logger.critical("Invalid group: %s" % args.group)
return 1
with context:
server.main(args=args)
server.main()
return 0

View File

@@ -108,32 +108,16 @@ class Server(object):
non-daemon mode.
"""
def __init__(self, servers, reconnect_sleep):
def __init__(self, logger, servers, reconnect_sleep):
self.logger = logger
self.driver = None
self.servers = servers
self.reconnect_sleep = reconnect_sleep
def main(self, logger=None, args=None):
"""
Main method of the server.
`logger`
If given, will be used as the logging class. Otherwise, a new
logger will be retrieved.
`args`
Only needed when `logger` is None.
"""
def main(self):
""" Main method of the server. """
my_ip = socket.gethostbyname(socket.gethostname())
task_name = "lbaas-%s" % my_ip
if logger:
self.logger = logger
else:
# We need to setup logging here because if we are running
# as a daemon, then any open file handles will have been closed.
self.logger = setup_logging('libra_worker', args)
self.logger.debug("Registering task %s" % task_name)
worker = CustomJSONGearmanWorker(self.servers)
@@ -202,16 +186,17 @@ def main():
driver = driver_class()
logger.debug("Job server list: %s" % args.server)
server = Server(args.server, args.reconnect_sleep)
server = Server(logger, args.server, args.reconnect_sleep)
server.driver = driver
if args.nodaemon:
server.main(logger=logger)
server.main()
else:
context = daemon.DaemonContext(
working_directory='/etc/haproxy',
umask=0o022,
pidfile=lockfile.FileLock(args.pid)
pidfile=lockfile.FileLock(args.pid),
files_preserve=[logger.handlers[0].stream]
)
if args.user:
try:
@@ -227,6 +212,6 @@ def main():
return 1
with context:
server.main(args=args)
server.main()
return 0