This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author thbach
Recipients r.david.murray, thbach, vinay.sajip
Date 2012-10-04.21:11:11
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1349385072.3.0.471151358609.issue16110@psf.upfronthosting.co.za>
In-reply-to
Content
vinay: I understand your preference of dictConfig over fileConfig as maintainer. But as an application developer I want to provide my user an easy way to adjust logging herself. In the end of the day she is the one knowing what has to be logged in which place. Therefor, having something like fileConfig is essential.

david: The modified configuration can be passed to fileConfig via a StringIO instance. 

The downside is that ConfigParser instances with e.g. 'allow_no_value' set to True are currently difficult to handle – e.g.:

>>> sys.version
'3.2.3 (default, Jun 25 2012, 23:10:56) \n[GCC 4.7.1]'
>>> cp = configparser.ConfigParser(allow_no_value=True)
>>> cp.read_string('[foo]\nbar')
>>> buf = io.StringIO()
>>> cp.write(buf)
>>> buf.seek(0)
0
>>> logging.config.fileConfig(buf)
---------------------------------------------------------------------------
ParsingError                              Traceback (most recent call last)
<ipython-input-67-0717fe665796> in <module>()
----> 1 logging.config.fileConfig(buf)

/usr/lib/python3.2/logging/config.py in fileConfig(fname, defaults, disable_existing_loggers)
     64     cp = configparser.ConfigParser(defaults)
     65     if hasattr(fname, 'readline'):
---> 66         cp.read_file(fname)
     67     else:
     68         cp.read(fname)

/usr/lib/python3.2/configparser.py in read_file(self, f, source)
    706             except AttributeError:
    707                 source = '<???>'
--> 708         self._read(f, source)
    709 
    710     def read_string(self, string, source='<string>'):

/usr/lib/python3.2/configparser.py in _read(self, fp, fpname)
   1079         # if any parsing errors occurred, raise an exception
   1080         if e:
-> 1081             raise e
   1082         self._join_multiline_values()
   1083 

ParsingError: Source contains parsing errors: <???>
	[line  2]: 'bar\n'

Hence, logging.config.fileConfig should at least provide a way to pass in arguments for the ConfigParser initialization. Anyways, I think it is much cleaner to provide a function which gets the configuration directly from the ConfigParser instance.
History
Date User Action Args
2012-10-04 21:11:12thbachsetrecipients: + thbach, vinay.sajip, r.david.murray
2012-10-04 21:11:12thbachsetmessageid: <1349385072.3.0.471151358609.issue16110@psf.upfronthosting.co.za>
2012-10-04 21:11:12thbachlinkissue16110 messages
2012-10-04 21:11:11thbachcreate