Handle missing / deleted / renamed files correctly.
[releng-anteater.git] / anteater / main.py
index 3a23ceb..ef127c2 100644 (file)
@@ -25,33 +25,63 @@ Options:
 """
 from __future__ import absolute_import
 
+import errno
+import logging
+
+import os
 import six.moves.configparser
 from docopt import docopt
-import os
+
+from anteater import LOG
 from anteater.src.patch_scan import prepare_patchset
 from anteater.src.project_scan import prepare_project
-from anteater.utils import anteater_logger as antlog
-
 
 config = six.moves.configparser.RawConfigParser()
 config.read('anteater.conf')
 reports_dir = config.get('config', 'reports_dir')
-logger = antlog.Logger(__name__).getLogger()
 __version__ = "0.1"
+logger = logging.getLogger(__name__)
+
+
+def _init_logging(anteater_log):
+    """ Setup root logger for package """
+
+    LOG.setLevel(logging.DEBUG)
+    ch = logging.StreamHandler()
+    formatter = logging.Formatter('%(asctime)s - %(name)s - '
+                                  '%(levelname)s - %(message)s')
+    ch.setFormatter(formatter)
+    ch.setLevel(logging.DEBUG)
+
+    # create the directory if it does not exist
+    path = os.path.dirname(anteater_log)
+    try:
+        os.makedirs(path)
+    except OSError as e:
+        if e.errno != errno.EEXIST:
+            raise
+
+    handler = logging.FileHandler(anteater_log)
+    handler.setFormatter(formatter)
+    handler.setLevel(logging.DEBUG)
+    del logging.root.handlers[:]
+    logging.root.addHandler(ch)
+    logging.root.addHandler(handler)
 
 
 def check_dir():
     """ Creates a directory for scan reports """
     try:
         os.makedirs(reports_dir)
-        logger.info('Creating reports directory: {0}'.format(reports_dir))
+        logger.info('Creating reports directory: %s', reports_dir)
     except OSError as e:
-        if not os.path.isdir(reports_dir):
-            logger.error(e)
+        if e.errno != errno.EEXIST:
+            raise
 
 
 def main():
     """ Main function, mostly for passing arguments """
+    _init_logging(config.get('config', 'anteater_log'))
     check_dir()
     arguments = docopt(__doc__, version=__version__)