Issue 1686200: logging package failure for NTEventLogHandler (original) (raw)

When using a configuration file to initialize a logger, a failure occurs in the logging.config.fileConfig() procedure such that the NTEventLogHandler is not created.

The failure is not observed when the NTEventLogHandler is explicitly defined in a script.

The attached script and two configuration initialization files demonstrate the failure as seen on a Microsoft Windows XP Pro computer running service pack 2 and Python 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)].

DETAILED DESCRIPTION:

When the attached script is run with EventLog.ini, on my Windows XP computer, the failure appears to occur at line 118: h = apply(klass, args) in File "C:\Python24\lib\logging\config.py" because for: klass: logging.handlers.NTEventLogHandler local variable args is: ('logging.config.fileConfig bug test') after line 116: args = cp.get(sectname, "args") but local variable args is: logging.config.fileConfig bug test after line 117: args = eval(args, vars(logging))

The behavior for the other two handlers is as follows:

  klass = logging.StreamHandler
     args is: (sys.stdout,)                                       ... after line 116
     args is: (<open file '<stdout>', mode 'w' at 0x00A1E068>,)   ... after line 117

  klass = logging.handlers.TimedRotatingFileHandler
     args is: ('fileConfig-test.log', 'midnight', 1, 3)           ... after line 116
     args is: ('fileConfig-test.log', 'midnight', 1, 3)           ... after line 117

The problem is that the args line in the config file should evaluate to a tuple. You have, in EventLog.ini, the line

args=('logging.config.fileConfig bug test')

Which does not evaluate a tuple. If you add a trailing comma,

args=('logging.config.fileConfig bug test',)

then everything is fine. It's an easy mistake to make ;-)