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:

- 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.

Example of a Log Statement with a Message ID in Python:
FORMAT = '%(asctime)s %(lineno)s %(levelname)s(%(messageid)s): %(message)s'
logger = logging.getLogger()
logger.warning('NFS problem. Unable to mount.', extra={ 'messageid' : 

// 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' : 

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.


vdsm-devel mailing list

Reply via email to