Revision: 6155
Author:   russblau
Date:     2008-12-16 19:34:48 +0000 (Tue, 16 Dec 2008)

Log Message:
-----------
Configure logging for basic terminal output and logfiles

Modified Paths:
--------------
    branches/rewrite/pywikibot/__init__.py
    branches/rewrite/pywikibot/bot.py
    branches/rewrite/pywikibot/config2.py

Modified: branches/rewrite/pywikibot/__init__.py
===================================================================
--- branches/rewrite/pywikibot/__init__.py      2008-12-16 07:49:38 UTC (rev 
6154)
+++ branches/rewrite/pywikibot/__init__.py      2008-12-16 19:34:48 UTC (rev 
6155)
@@ -7,7 +7,7 @@
 #
 # Distributed under the terms of the MIT license.
 #
-__version__ = '$Id: $'
+__version__ = '$Id$'
 
 import sys
 import logging
@@ -16,7 +16,7 @@
 from exceptions import *
 import config2 as config
 import textlib
-from bot import handleArgs, showHelp
+from bot import *
 
 
 def deprecate_arg(old_arg, new_arg):
@@ -120,11 +120,6 @@
     return raw_input(prompt)
 
 
-# Logger configuration
-
-logging.basicConfig()
-logging.getLogger().setLevel(logging.INFO)
-
 def set_debug(layer):
     """Set the logger for specified layer to DEBUG level.
 
@@ -174,7 +169,7 @@
     # only need one drop() call because all throttles use the same global pid
     try:
         _sites[_sites.keys()[0]].throttle.drop()
-        logger.info("Dropped throttle(s).")
+        logger.log("VERBOSE", "Dropped throttle(s).")
     except IndexError:
         pass
 

Modified: branches/rewrite/pywikibot/bot.py
===================================================================
--- branches/rewrite/pywikibot/bot.py   2008-12-16 07:49:38 UTC (rev 6154)
+++ branches/rewrite/pywikibot/bot.py   2008-12-16 19:34:48 UTC (rev 6155)
@@ -7,14 +7,14 @@
 #
 # Distributed under the terms of the MIT license.
 #
-__version__ = '$Id: $'
+__version__ = '$Id$'
 
 # Note: the intention is to develop this module (at some point) into a Bot
 # class definition that can be subclassed to create new, functional bot
 # scripts, instead of writing each one from scratch.
 
 
-import logging
+import logging, logging.handlers
 import os.path
 import sys
 import pywikibot
@@ -64,7 +64,6 @@
     args may be passed as an argument, thereby overriding sys.argv
 
     """
-    global verbose
     # get commandline arguments if necessary
     if not args:
         args = sys.argv[1:]
@@ -72,6 +71,8 @@
     # required because the -help option loads the module's docstring and 
because
     # the module name will be used for the filename of the log.
     moduleName = calledModuleName()
+    if not moduleName:
+        moduleName = "terminal-interface"
     nonGlobalArgs = []
     for arg in args:
         arg = _decodeArg(arg)
@@ -87,15 +88,23 @@
         elif arg.startswith('-pt:'):
             config.put_throttle = int(arg[4:])
         elif arg == '-log':
-            setLogfileStatus(True) #FIXME
+            if moduleName not in config.log:
+                config.log.append(moduleName)
         elif arg.startswith('-log:'):
-            setLogfileStatus(True, arg[5:]) #FIXME
+            if moduleName not in config.log:
+                config.log.append(moduleName)
+            config.logfilename = arg[5:]
         elif arg == '-nolog':
-            setLogfileStatus(False) #FIXME
+            if moduleName in config.log:
+                config.log.remove(moduleName)
+        elif arg == "-debug":
+            if moduleName not in config.log:
+                config.log.append(moduleName)
+            config.log.debug_log = True
         elif arg == '-verbose' or arg == "-v":
             pywikibot.output(u'Pywikipediabot %s' % (version.getversion()))
             pywikibot.output(u'Python %s' % (sys.version))
-            verbose += 1 # FIXME
+            config.verbose_output += 1
         elif arg == '-daemonize':
             import daemonize
             daemonize.daemonize()
@@ -106,6 +115,35 @@
             # the argument is not global. Let the specific bot script care
             # about it.
             nonGlobalArgs.append(arg)
+
+    # initialize logging system for terminal-based bots
+
+    logging.addLevelName(18, "VERBOSE") # for messages to be displayed on 
+                                        # terminal at "verbose" setting
+                                        # use INFO for messages to be displayed
+                                        # even on non-verbose setting
+    logging.addLevelName(24, "STDOUT")  # for messages to be displayed to 
stdout
+    logging.addLevelName(26, "INPUT")   # for prompts requiring user response
+
+    logging.basicConfig()               # initializes root logger
+    root_logger = logging.getLogger()
+    if config.verbose_output:
+        root_logger.setLevel("VERBOSE")
+    else:
+        root_logger.setLevel(logging.INFO)
+    if moduleName in config.log:
+        if config.logfilename:
+            logfile = config.datafilepath(config.logfilename)
+        else:
+            logfile = config.datafilepath("%s.log" % moduleName)
+        file_handler = logging.handlers.RotatingFileHandler(
+                            filename=logfile, maxBytes=2 << 20, backupCount=5)
+        if config.debug_log:
+            file_handler.setLevel(logging.DEBUG)
+        else:
+            file_handler.setLevel("VERBOSE")
+        logging.addHandler(file_handler)
+
     return nonGlobalArgs
 
 

Modified: branches/rewrite/pywikibot/config2.py
===================================================================
--- branches/rewrite/pywikibot/config2.py       2008-12-16 07:49:38 UTC (rev 
6154)
+++ branches/rewrite/pywikibot/config2.py       2008-12-16 19:34:48 UTC (rev 
6155)
@@ -216,6 +216,9 @@
 # be used to generate so-called warnfiles.
 # This setting can be overridden by the -log or -nolog command-line arguments.
 log = ['interwiki']
+logfilename = None # defaults to modulename.log
+verbose_output = 0
+debug_log = False
 
 ############## INTERWIKI SETTINGS ##############
 



_______________________________________________
Pywikipedia-l mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/pywikipedia-l

Reply via email to