By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
429,313 Members | 2,798 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 429,313 IT Pros & Developers. It's quick & easy.

logging exceptions

P: n/a
why doesn't logging throw any exception when it should? how do I
configure logging to throw exceptions?
>>try:
.... logging.fatal('asdf %d', '123')
.... except:
.... print 'this line is never printed'
....
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
python2.5/logging/__init__.py", line 744, in emit
msg = self.format(record)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
python2.5/logging/__init__.py", line 630, in format
return fmt.format(record)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
python2.5/logging/__init__.py", line 418, in format
record.message = record.getMessage()
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
python2.5/logging/__init__.py", line 288, in getMessage
msg = msg % self.args
TypeError: int argument required
Aug 26 '08 #1
Share this Question
Share on Google+
4 Replies


P: n/a


Alexandru Mosoi napisa≥(a):
why doesn't logging throw any exception when it should? how do I
configure logging to throw exceptions?
>try:
... logging.fatal('asdf %d', '123')
... except:
... print 'this line is never printed'
...
[...]

You need to subclass your handler and redefine `handleError` method.
See: http://docs.python.org/lib/node409.html

HTH,
Rob
Aug 26 '08 #2

P: n/a
On Aug 26, 10:36 am, Alexandru Mosoi <brtz...@gmail.comwrote:
why doesn'tloggingthrow any exception when it should? how do I
configureloggingto throw exceptions?
>try:

... logging.fatal('asdf %d', '123')
... except:
... print 'this line is never printed'
...
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
python2.5/logging/__init__.py", line 744, in emit
msg = self.format(record)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
python2.5/logging/__init__.py", line 630, in format
return fmt.format(record)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
python2.5/logging/__init__.py", line 418, in format
record.message = record.getMessage()
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
python2.5/logging/__init__.py", line 288, in getMessage
msg = msg % self.args
TypeError: int argument required
Was your traceback from the snippet you posted? If it was, then the
exception (a TypeError) *is* being raised from logging. So I don't
understand your question "why doesn't logging throw any exception when
it should?", because logging is raising an exception here.

To cause logging to *not* raise exceptions, set
logging.raiseExceptions to 0 (default is 1). The raiseExceptions
variable would normally be set to 0 in a production environment, where
you don't want logging-related exceptions to bring an application
down.

Regards,

Vinay Sajip
Aug 27 '08 #3

P: n/a


Vinay Sajip napisa≥(a):
On Aug 26, 10:36 am, Alexandru Mosoi <brtz...@gmail.comwrote:
why doesn'tloggingthrow any exception when it should? how do I
configureloggingto throw exceptions?
>>try:
... logging.fatal('asdf %d', '123')
... except:
... print 'this line is never printed'
...
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
python2.5/logging/__init__.py", line 744, in emit
msg = self.format(record)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
python2.5/logging/__init__.py", line 630, in format
return fmt.format(record)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
python2.5/logging/__init__.py", line 418, in format
record.message = record.getMessage()
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
python2.5/logging/__init__.py", line 288, in getMessage
msg = msg % self.args
TypeError: int argument required

Was your traceback from the snippet you posted? If it was, then the
exception (a TypeError) *is* being raised from logging. So I don't
understand your question "why doesn't logging throw any exception when
it should?", because logging is raising an exception here.
No, it isn't.
This traceback is *printed* in `Handler.handleError` method:

<code from logging>
__version__ = "0.5.0.2"

[...]

def handleError(self, record):
"""
Handle errors which occur during an emit() call.

This method should be called from handlers when an exception
is
encountered during an emit() call. If raiseExceptions is
false,
exceptions get silently ignored. This is what is mostly wanted
for a logging system - most users will not care about errors
in
the logging system, they are more interested in application
errors.
You could, however, replace this with a custom handler if you
wish.
The record which was being processed is passed in to this
method.
"""
if raiseExceptions:
ei = sys.exc_info()
traceback.print_exception(ei[0], ei[1], ei[2], None,
sys.stderr)
del ei

</code from logging>
>
To cause logging to *not* raise exceptions, set
logging.raiseExceptions to 0 (default is 1). The raiseExceptions
variable would normally be set to 0 in a production environment, where
you don't want logging-related exceptions to bring an application
down.
Well, I think that it will not help. The exception will be printed
not raised. The only solution is to redefine `handleError` method
or maybe I've missed something?

Br,
Rob
Aug 27 '08 #4

P: n/a
On Aug 27, 10:30 am, Rob Wolfe <r...@smsnet.plwrote:
Vinay Sajip napisa≥(a):
On Aug 26, 10:36 am, Alexandru Mosoi <brtz...@gmail.comwrote:
why doesn'tloggingthrow any exception when it should? how do I
configureloggingto throw exceptions?
>try:
... logging.fatal('asdf %d', '123')
... except:
... print 'this line is never printed'
...
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
python2.5/logging/__init__.py", line 744, in emit
msg = self.format(record)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
python2.5/logging/__init__.py", line 630, in format
return fmt.format(record)
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
python2.5/logging/__init__.py", line 418, in format
record.message = record.getMessage()
File "/Library/Frameworks/Python.framework/Versions/2.5/lib/
python2.5/logging/__init__.py", line 288, in getMessage
msg = msg % self.args
TypeError: int argument required
Was your traceback from the snippet you posted? If it was, then the
exception (a TypeError) *is* being raised fromlogging. So I don't
understand your question "why doesn'tloggingthrow any exception when
it should?", becauseloggingis raising an exception here.

No, it isn't.
This traceback is *printed* in `Handler.handleError` method:
You're right - silly me. I wasn't paying attention :-(
variable would normally be set to 0 in a production environment, where
you don't wantlogging-related exceptions to bring an application
down.

Well, I think that it will not help. The exception will be printed
not raised. The only solution is to redefine `handleError` method
or maybe I've missed something?

No, you're right. To do custom handling of exceptions, handleError
needs to be overridden.

Regards,

Vinay
Aug 27 '08 #5

This discussion thread is closed

Replies have been disabled for this discussion.