On Wed 05 Oct 2011 08:24:13 PM IST, Keith Robertson wrote:
Hi,
I would like to propose enhancing the VDSM source to emit message IDs in log messages with levels greater than DEBUG (i.e. INFO, ERROR, WARN, EXCEPTION, and CRITICAL). Messages IDs have been used successfully in many products and they can aid in debugging, documentation, root cause analysis, and internationalization.
I have scanned the source and have determined that there are roughly 525 calls to log.[error|warn|info|critical|exception] and I am volunteering to go through and add IDs to them all but, before I do I want to get buy-in from the project maintainers. While adding IDs to the messages I would also enable them for i18n.
I have written a rough plan for adding messages IDs to VDSM below and I've provided some examples of products/projects that use message IDs.
Examples of Projects that Use Message IDs:
- JBoss 7 is adopting Message IDs for all of its logging. See the
annotations (e.g. @Message(id = 12000, ) in the following piece of source: https://github.com/jbossas/jboss-as/blob/master/process-controller/src/main/...
- Almost all IBM products use message IDs and they do a fairly good job
of documenting them. Google has indexed them all and you can simply type them in to a search and get a description of the problem that is associated with the ID. http://publib.boulder.ibm.com/infocenter/tivihelp/v42r1/topic/com.ibm.omegam...
Example of a Log Statement with a Message ID in Python: FORMAT = '%(asctime)s %(lineno)s %(levelname)s(%(messageid)s): %(message)s' logging.basicConfig(format=FORMAT) logger = logging.getLogger() logger.warning('NFS problem. Unable to mount.', extra={ 'messageid' : 'VDSM1000'})
// Produces 2011-10-05 13:24:43,180 11 WARNING(VDSM1000): NFS problem. Unable to mount.
Example of a Log Statement with a Message ID in Python with i18n: logger.warning(_('NFS problem. Unable to mount.'), extra={ 'messageid' : 'VDSM1000'})
Example of an i18n Log Message: Chinese: 2011年10月5日13:24:43,18011警告(VDSM1000):NFS问题。无法安装。 English: 2011-10-05 13:24:43,180 11 WARNING(VDSM1000): NFS problem. Unable to mount.
A Rough Plan for adding Message IDs to VDSM:
Step 0: Decide on a logging format of the ID itself:
- JBoss is using "JBAS#####". I am thinking that VDSM could probably do
something similar "VDSM####".
Step 1: Decide where to list and document all of the IDs.
- It could be as simple as a page on VDSM's fedorahosted wiki.
Step 2: Pin the format of the log messages:
- Currently VDSM allows a user configurable Python log format. We would
need to pin the format so that it includes a substitution variable for the message ID. Example: '%(asctime)s %(lineno)s %(levelname)s(%(messageid)s): %(message)s'
Step 4: Plow through the VDSM source and add message IDs.
Cheers, Keith
vdsm-devel mailing list vdsm-devel@lists.fedorahosted.org https://fedorahosted.org/mailman/listinfo/vdsm-devel
Seems like a nice idea. But how does it affect developers. How do they choose mIDs? How do you prevent collisions? How are they different from simple gettext?