Message Handling

Strictly speaking, message handling is a general COIN topic, but it won't hurt to repeat a few important things here.

A simple user you may wish to turn off some output. This is done with model.setLogLevel(int value) where 0 gives nothing and each increase in value switches on more messages. See ClpMessage.cpp, CoinMessage.cpp and Chapter 6, Messages to see which messages are at which level. A more sophisticated user may wish to handle messages in a different way. This is done using passInMessageHandler with a pointer to a handler of the user's own design. The simplest case would be to use the default handler but use a constructor which writes to file. The code would be:

  FILE * fp; // assumed open
  CoinMessageHandler handler(fp);

A still more sophisticated use would be to write a class derived from CoinMessageHandler and then override the print method. Below follows an example which would print only a message for optimality (or infeasibility):

Example 3.1. Sophisticated message handling

  class DerivedHandler :
   public CoinMessageHandler {
     virtual int print() ;

   int DerivedHandler::print()
     if (currentSource()=="Clp") {
       if (currentMessage().externalNumber()>=0
       && currentMessage().externalNumber()<4) { 
         // finished
         return CoinMessageHandler::print(); // print
     return 0;