[PATCH] Add syslog logging support (#1153768)

Martin Kolman mkolman at redhat.com
Thu Oct 23 09:41:50 UTC 2014


On Thu, 2014-10-23 at 09:20 +0200, Vratislav Podzimek wrote:
> On Wed, 2014-10-22 at 18:47 +0200, Martin Kolman wrote:
> > Add an Initial Setup specific log handling module that
> > forwards nicely formated log messages to the system log
> > and also correctly maps message log levels to system log
> > priorities (in journalctl: info & debug - no highlight, warning - bold,
> > error & critical - red).
> > 
> > This finally makes it possible to report in detail what's going on during the Initial
> > Setup run, with emphasis on providing enough information on problematic areas,
> > such as Kickstart parsing.
> > 
> > BTW, to check for all Initial Setup log messages in Journal you can
> > use the -u flag with the Initial Setup unit name:
> > 
> > journalctl -u initial-setup-graphical
> > 
> > or
> > 
> > journalctl -u initial-setup-text
> > 
> > Resolves: rhbz#1153768
> > Signed-off-by: Martin Kolman <mkolman at redhat.com>
> > ---
> >  initial_setup/__main__.py          | 49 ++++++++++++++++++++++++++++++++++---
> >  initial_setup/gui/spokes/eula.py   |  9 +++++++
> >  initial_setup/initial_setup_log.py | 50 ++++++++++++++++++++++++++++++++++++++
> >  initial_setup/product.py           |  5 +++-
> >  initial_setup/tui/spokes/eula.py   |  8 ++++++
> >  5 files changed, 116 insertions(+), 5 deletions(-)
> >  create mode 100644 initial_setup/initial_setup_log.py
> > 
> > diff --git a/initial_setup/__main__.py b/initial_setup/__main__.py
> > index 4b07386..f76a600 100644
> > --- a/initial_setup/__main__.py
> > +++ b/initial_setup/__main__.py
> > @@ -3,22 +3,37 @@ import os
> >  import sys
> >  import signal
> >  import pykickstart
> > +import logging
> >  from pyanaconda.users import Users
> >  from initial_setup.post_installclass import InstallClass
> > +from initial_setup import initial_setup_log
> > +from pyanaconda import iutil
> > +
> > +INPUT_KICKSTART_PATH = "/root/anaconda-ks.cfg"
> > +OUTPUT_KICKSTART_PATH = "/root/initial-setup-ks.cfg"
> > +
> > +# set root to "/", we are now in the installed system
> > +iutil.setSysroot("/")
> >  
> >  signal.signal(signal.SIGINT, signal.SIG_IGN)
> >  
> > +initial_setup_log.init()
> > +log = logging.getLogger("initial-setup")
> > +
> >  if "DISPLAY" in os.environ and os.environ["DISPLAY"]:
> >      mode="gui"
> >  else:
> >      mode="tui"
> >  
> > +log.debug("display mode detected: %s", mode)
> > +
> >  if mode == "gui":
> >      # We need this so we can tell GI to look for overrides objects
> >      # also in anaconda source directories
> >      import gi.overrides
> >      for p in os.environ.get("ANACONDA_WIDGETS_OVERRIDES", "").split(":"):
> >          gi.overrides.__path__.insert(0, p)
> > +    log.debug("GI overrides imported")
> >  
> >  # set the root path to / so the imported spokes
> >  # know where to apply their changes
> > @@ -36,18 +51,24 @@ addon_paths = ["/usr/share/initial-setup/modules", "/usr/share/anaconda/addons"]
> >  sys.path.extend(addon_paths)
> >  
> >  addon_module_paths = collect_addon_paths(addon_paths, mode)
> > +log.info("found %d addon modules:", len(addon_module_paths))
> > +for addon_path in addon_module_paths:
> > +    log.debug(addon_path)
> >  
> >  # Too bad anaconda does not have modularized logging
> > +log.debug("initializing the Anaconda log")
> >  from pyanaconda import anaconda_log
> >  anaconda_log.init()
> >  
> > 
> >  # init threading before Gtk can do anything and before we start using threads
> >  # initThreading initializes the threadMgr instance, import it afterwards
> > +log.debug("initializing threading")
> >  from pyanaconda.threads import initThreading
> >  initThreading()
> >  
> >  # initialize network logging (needed by the Network spoke that may be shown)
> > +log.debug("initializing network logging")
> >  from pyanaconda.network import setup_ifcfg_log
> >  setup_ifcfg_log()
> >  
> > @@ -71,18 +92,23 @@ commandMap = dict((k, kickstart.commandMap[k]) for k in kickstart_commands)
> >  # Prepare new data object
> >  data = kickstart.AnacondaKSHandler(addon_module_paths["ks"], commandUpdates=commandMap)
> >  
> > +log.info("parsing input kickstart %s", INPUT_KICKSTART_PATH)
> >  try:
> >      # Read the installed kickstart
> >      parser = kickstart.AnacondaKSParser(data)
> > -    parser.readKickstart("/root/anaconda-ks.cfg")
> > +    parser.readKickstart(INPUT_KICKSTART_PATH)
> > +    log.info("kickstart parsing done")
> >  except pykickstart.errors.KickstartError as kserr:
> > +    log.exception("kickstart parsing failed")
> >      sys.exit(1)
> >  
> >  if mode == "gui":
> >      try:
> >          # Try to import IS gui specifics
> > +        log.debug("trying to import GUI")
> >          import gui
> >      except ImportError:
> > +        log.error("GUI import failed, falling back to TUI")
> >          mode = "tui"
> >  
> >  if mode == "gui":
> > @@ -92,6 +118,7 @@ if mode == "gui":
> >      gui.InitialSetupGraphicalUserInterface.update_paths(addon_module_paths)
> >  
> >      # Initialize the UI
> > +    log.debug("initializing GUI")
> >      ui = gui.InitialSetupGraphicalUserInterface(None, None, InstallClass())
> >  else:
> >      # Import IS gui specifics
> > @@ -101,21 +128,26 @@ else:
> >      tui.InitialSetupTextUserInterface.update_paths(addon_module_paths)
> >  
> >      # Initialize the UI
> > +    log.debug("initializing TUI")
> >      ui = tui.InitialSetupTextUserInterface(None, None, None)
> >  
> >  # Pass the data object to user inteface
> > +log.debug("setting up the UI")
> >  ui.setup(data)
> >  
> >  # Start the application
> > +log.info("starting the UI")
> >  ret = ui.run()
> >  
> >  # TUI returns False if the app was ended prematurely
> >  # all other cases return True or None
> >  if ret == False:
> >      if data.eula.agreed:
> > +	log.info("EULA accepted, shuttong down")
> >          sys.exit(0)
> This looks like bad indentation (at least in my Evolution).
Oh, right! Thanks for spotting this, fixing locally! :)
> 
> Otherwise this looks good to me.
> 




More information about the anaconda-patches mailing list