Add a new file virtManager/cli.py to share code between virt-manager and virt-manager-tui. Move virt-manager.py setup_logging there
Have virt-manager-tui log to ~/.virt-manager/virt-manager-tui.log, rather than the hardcoded path in /var/log that requires root perms Signed-off-by: Cole Robinson <[email protected]> --- src/virt-manager-tui.py.in | 5 ++- src/virt-manager.py.in | 68 ++-------------------------------- src/virtManager/cli.py | 85 +++++++++++++++++++++++++++++++++++++++++++ src/virtManagerTui/utils.py | 7 ---- 4 files changed, 93 insertions(+), 72 deletions(-) create mode 100644 src/virtManager/cli.py diff --git a/src/virt-manager-tui.py.in b/src/virt-manager-tui.py.in index 9e1a283..c76eb9f 100644 --- a/src/virt-manager-tui.py.in +++ b/src/virt-manager-tui.py.in @@ -28,7 +28,7 @@ import sys import traceback # These are substituted into code based on --prefix given to configure -appname = "::PACKAGE::" +appname = "::PACKAGE::-tui" appversion = "::VERSION::" gettext_app = "virt-manager" gettext_dir = "::GETTEXTDIR::" @@ -112,7 +112,10 @@ def main(): setup_i18n() setup_pypath() + from virtManager import cli + (options, ignore) = parse_commandline() + cli.setup_logging(appname, options.debug) # Make sure we have a sufficiently new virtinst version, since we are # very closely tied to the lib diff --git a/src/virt-manager.py.in b/src/virt-manager.py.in index 67b151f..75a2cb5 100755 --- a/src/virt-manager.py.in +++ b/src/virt-manager.py.in @@ -1,4 +1,3 @@ -# -*- python -*- # # Copyright (C) 2006 Red Hat, Inc. # Copyright (C) 2006 Daniel P. Berrange <[email protected]> @@ -23,12 +22,9 @@ import os import os.path import sys -import libvirt - +import logging import locale import gettext -import logging -import logging.handlers import traceback import signal from optparse import OptionParser, OptionValueError @@ -133,64 +129,6 @@ def drop_stdio(): os.dup2(0, 1) os.dup2(0, 2) -def setup_logging(appname, debug_stdout): - # Configure python logging to capture all logs we generate - # to $HOME/.virt-manager/${app}.log This file has - # proved invaluable for debugging - MAX_LOGSIZE = 1024 * 1024 # 1MB - ROTATE_NUM = 5 - DIR_NAME = ".virt-manager" - FILE_NAME = "%s.log" % appname - FILE_MODE = 'ae' - FILE_FORMAT = ("[%(asctime)s virt-manager %(process)d] " - "%(levelname)s (%(module)s:%(lineno)d) %(message)s") - DATEFMT = "%a, %d %b %Y %H:%M:%S" - - # set up logging - vm_dir = os.path.expanduser("~/%s" % DIR_NAME) - if not os.access(vm_dir, os.W_OK): - if os.path.exists(vm_dir): - raise RuntimeError("No write access to %s" % vm_dir) - - try: - os.mkdir(vm_dir, 0751) - except IOError, e: - raise RuntimeError("Could not create directory %s: %s" % - (vm_dir, e)) - - filename = "%s/%s" % (vm_dir, FILE_NAME) - rootLogger = logging.getLogger() - rootLogger.setLevel(logging.DEBUG) - fileHandler = logging.handlers.RotatingFileHandler(filename, - FILE_MODE, MAX_LOGSIZE, ROTATE_NUM) - fileHandler.setFormatter(logging.Formatter(FILE_FORMAT, DATEFMT)) - rootLogger.addHandler(fileHandler) - - if debug_stdout: - streamHandler = logging.StreamHandler(sys.stderr) - streamHandler.setLevel(logging.DEBUG) - streamHandler.setFormatter(logging.Formatter( - "%(asctime)s (%(module)s:%(lineno)d): %(message)s")) - rootLogger.addHandler(streamHandler) - - logging.info("%s startup" % appname) - - # Register libvirt handler - def libvirt_callback(ctx_ignore, err): - if err[3] != libvirt.VIR_ERR_ERROR: - # Don't log libvirt errors: global error handler will do that - logging.warn("Non-error from libvirt: '%s'" % err[2]) - libvirt.registerErrorHandler(f=libvirt_callback, ctx=None) - - # Log uncaught exceptions - def exception_log(typ, val, tb): - if not traceback: - return - s = traceback.format_exception(typ, val, tb) - logging.exception("".join(s)) - sys.__excepthook__(typ, val, tb) - sys.excepthook = exception_log - def parse_commandline(): optParser = OptionParser(version=appversion, usage="virt-manager [options]") @@ -323,6 +261,8 @@ def main(): setup_i18n() setup_pypath() + from virtManager import cli + # Need to do this before GTK strips args like --sync gtk_error = None origargs = " ".join(sys.argv[:]) @@ -361,7 +301,7 @@ def main(): raise RuntimeError(_("Unable to initialize GTK: %s") % gtk_error) raise gtk_error - setup_logging(appname, options.debug) + cli.setup_logging(appname, options.debug) global logging_setup logging_setup = True diff --git a/src/virtManager/cli.py b/src/virtManager/cli.py new file mode 100644 index 0000000..4b59286 --- /dev/null +++ b/src/virtManager/cli.py @@ -0,0 +1,85 @@ +# +# Copyright (C) 2011 Red Hat, Inc. +# Copyright (C) 2011 Cole Robinson <[email protected]> +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, +# MA 02110-1301 USA. +# + +import os +import sys +import logging +import logging.handlers +import traceback + +import libvirt + +def setup_logging(appname, debug_stdout): + # Configure python logging to capture all logs we generate + # to $HOME/.virt-manager/${app}.log This file has + # proved invaluable for debugging + MAX_LOGSIZE = 1024 * 1024 # 1MB + ROTATE_NUM = 5 + DIR_NAME = ".virt-manager" + FILE_NAME = "%s.log" % appname + FILE_MODE = 'ae' + FILE_FORMAT = ("[%(asctime)s virt-manager %(process)d] " + "%(levelname)s (%(module)s:%(lineno)d) %(message)s") + DATEFMT = "%a, %d %b %Y %H:%M:%S" + + # set up logging + vm_dir = os.path.expanduser("~/%s" % DIR_NAME) + if not os.access(vm_dir, os.W_OK): + if os.path.exists(vm_dir): + raise RuntimeError("No write access to %s" % vm_dir) + + try: + os.mkdir(vm_dir, 0751) + except IOError, e: + raise RuntimeError("Could not create directory %s: %s" % + (vm_dir, e)) + + filename = "%s/%s" % (vm_dir, FILE_NAME) + rootLogger = logging.getLogger() + rootLogger.setLevel(logging.DEBUG) + fileHandler = logging.handlers.RotatingFileHandler(filename, + FILE_MODE, MAX_LOGSIZE, ROTATE_NUM) + fileHandler.setFormatter(logging.Formatter(FILE_FORMAT, DATEFMT)) + rootLogger.addHandler(fileHandler) + + if debug_stdout: + streamHandler = logging.StreamHandler(sys.stderr) + streamHandler.setLevel(logging.DEBUG) + streamHandler.setFormatter(logging.Formatter( + "%(asctime)s (%(module)s:%(lineno)d): %(message)s")) + rootLogger.addHandler(streamHandler) + + logging.info("%s startup" % appname) + + # Register libvirt handler + def libvirt_callback(ctx_ignore, err): + if err[3] != libvirt.VIR_ERR_ERROR: + # Don't log libvirt errors: global error handler will do that + logging.warn("Non-error from libvirt: '%s'" % err[2]) + libvirt.registerErrorHandler(f=libvirt_callback, ctx=None) + + # Log uncaught exceptions + def exception_log(typ, val, tb): + if not traceback: + return + s = traceback.format_exception(typ, val, tb) + logging.exception("".join(s)) + sys.__excepthook__(typ, val, tb) + sys.excepthook = exception_log diff --git a/src/virtManagerTui/utils.py b/src/virtManagerTui/utils.py index d4e3f52..1401c1f 100644 --- a/src/virtManagerTui/utils.py +++ b/src/virtManagerTui/utils.py @@ -16,15 +16,8 @@ # MA 02110-1301, USA. A copy of the GNU General Public License is # also available at http://www.gnu.org/copyleft/gpl.html. -import logging import re -logging.basicConfig(level=logging.DEBUG, - format='%(asctime)s %(levelname)-8s %(message)s', - datefmt='%a, %d %b %Y %H:%M:%S', - filename='/var/log/ovirt-nodeadmin.log', - filemode='w') - def string_is_not_blank(value): if len(value) > 0: return True return False -- 1.7.4 _______________________________________________ virt-tools-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/virt-tools-list
