Some traceback logging fails to account for the fact that tracebacks consist of multiple line. So we have this code:
self.log.error("Unhandled exception trying to unbind ports for display %d on VSM Agent %s: %s %s %s. Marking agent as down." % \
exception, info, format_exc()))
Which would seem like it produces a single line. But instead we get this mess:
2015-10-01 15:42:11 ERROR vsmserver.session: Unhandled exception trying to unbind ports for display 1 on VSM Agent 127.0.0.1:904: <type 'exceptions.TypeError'> 'NoneType' object has no attribute '__getitem__' Tr
aceback (most recent call last):
File "/opt/thinlinc/modules/thinlinc/vsm/async.py", line 112, in iii11
obj . handle_read_event ( )
File "/usr/lib64/python2.7/asyncore.py", line 449, in handle_read_event
File "/usr/lib64/python2.7/asynchat.py", line 147, in handle_read
File "/opt/thinlinc/modules/thinlinc/vsm/xmlrpc.py", line 405, in found_terminator
self . handle_response ( )
File "/opt/thinlinc/modules/thinlinc/vsm/xmlrpc.py", line 437, in handle_response
self . handle_returnvalue ( )
File "/opt/thinlinc/modules/thinlinc/vsm/call_unbindports.py", line 41, in handle_returnvalue
self . callback ( )
File "/opt/thinlinc/modules/thinlinc/vsm/loginhandler_common.py", line 71, in run_sessionscripts
self . send_response ( )
File "/opt/thinlinc/modules/thinlinc/vsm/loginhandler_common.py", line 88, in send_response
oOOoo ) [ 'sessionkey' ]
TypeError: 'NoneType' object has no attribute '__getitem__'
. Marking agent as down.
This issue is mostly resolved now that we've consolidated all traceback printing in vsmserver and vsmagent. There are a few other cases in the tree, but they all handle this correctly, except for the status module in tlwebadm.
I'm not even sure if it's appropriate for that to output tracebacks as they end up being part of the page shown to the user, not as part of the log.