Dear Rooters, I learned from Rene, that several users/collaborations are thinking about a "global" ROOT messaging system. I have come up with a simple idea and would like know your opinion. I admit that the classes I use will not match the current definition. A message will go through TROOT to the message handler. The message handler will be set with TROOT->SetMessageHandler(TMessageHandler *) If the Message handler is not set (or set to 0), a "standard" message should be written to cout. There will be two kinds of messages: - "one-time" messages and - message that will appear more often. and several levels of messages - Debug messages - Informational messages - Warning messages - Error messages - Fatal messages -... (startup messages, etc....) The message level can be an enumeration TMessageLevel In the first case, the message will be send to TROOT with TROOT->SendMessage(Char_t *, TMessageLevel) and will be given to the message handler. In the latter case it should be possible to "register" the message with the handler. Int_t handler->Register(Char_t *, TMessageLevel) The handler then stores the message string and returns a (unique) message number a. The message will then be called with TROOT->SendMessage(Int_t a) or TROOT->SendMessage(Int_t a, Char_t *) where the longer version allows to make additional "output". The message handler can do with these messages, what he likes to do. A simple handler might only print the message. A more complex one will also count how often a register message occures and will be able to print a statistics at the end. Also a message handler might be able to suppress messages below a certain level or a set of levels. Examples: ofstream *errout = new ofstream("outputfile"); TMessageHandler *h = new TMessageHandler (errout); int e1 = h->Register("Negative cluster energy", kMessageWarning); int e2 = h->Register("Cell number out of range : ", kMessageError); h->Suppress(kMessageDebug); TROOT->SetMessageHandler(h); ... TROOT->SendMessage("Entering cluster routine",kMessageDebug); { will print nothing, because kMessageDebug messages are suppressed } ... TROOT->SendMessage(e1); { will print : Error: Negative cluster energy } ... char buffer[200]; sprintf (buffer,"%d",num); TROOT->SendMessage(e2,buffer); { will print : Error: Cell number out of range : 100 } ... h->PrintStatistics(); { will print : #of occurences Error 10 Negative cluster energy 2 Cell number out of range : } Of course this is only a first idea and the interface for the message handler should be defined for thorougly. Ciao Thomas ---------------------------------------------------------------------------- Thomas Hadig, Ottensen, Donnerstr. 20, 22763 Hamburg (+49 40 39901186) office : I. Phys. Institut AAC, Room 1c354, Notkestr. 85, 22607 Hamburg hadig@rwth-aachen.de Tel. +49 40 8998 2312 http://www-h1.desy.de/~hadig/ FAX +49 40 8998 4385 ---------------------------------------------------------------------------- The way to get rich with Object Orientied Programming --- Inheritance ----------------------------------------------------------------------------
This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:17 MET