El funcionament del mecanisme de logging és molt similar al mecanisme per reportar excepcions.

LoggerManager

Cal tenir una implementació de l’interfície LoggerManager:

package edu.uoc.dpcs.lsim.logger;

/**
 * Interface that must be implemented to use LSim.log()
 * @author manel
 *
 */
public interface LoggerManager {
    
    public void log(String level, String message);

}

De la mateixa manera que amb les excepcions, hi ha disponibles dues implementacions que podem fer servir:

  • DummyLoggerManager: escriu en local els missatges que rep.

  • RemoteLoggerManager: envia els missatges a un servidor. Aquest servidor pot ser el mateix que s’utilitza per les excepcions.

      package edu.uoc.dpcs.lsim.logging;
    
      import lsim.exceptions.remote.RemoteExceptionManager;
    
      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;
    
      import edu.uoc.connectorLayer.sender.Sender;
      import edu.uoc.dpcs.lsim.logger.LoggerManager;
    
      public class RemoteLoggerManager implements LoggerManager{
          
          private Logger logger = LoggerFactory.getLogger(RemoteExceptionManager.class);
    
          private String host;
          private String port;
    
          @Override
          public void log(String level, String message) {
              logger.info("Somebody is logging a message: " + message);
              
              Sender send = new Sender(null);
              try {
                  send.sendMessage(message, Sender.Mode.CLOSE_AFTER, host, Integer.parseInt(port));
              } catch (Exception e) {
                  logger.error("Error sending message: " + e.getMessage());
              }
              
          }
    
          public void setHost(String host) {
              this.host = host;
          }
    
          public void setPort(String port) {
              this.port = port;
          }
      }

Especificació de l’experiment

Cal indicar quin LoggerManager farem servir a l’especificació de l’experiment

<?xml version="1.0" encoding="UTF-8" ?>
<Specification>

    <experimentId>test-app</experimentId>

    <Coordinators>
        <num>1</num>
        <codeRef>lsim.LSimDispatcherHandler::/home/manel/lsim/test-app/elements/coordinator::coordinator.sh
        </codeRef>
        <timeInit>5</timeInit>
        <timeEval>1</timeEval>
        <param>2</param>
    </Coordinators>
    <ExceptionManager>
        <class>lsim.exceptions.remote.RemoteExceptionManager</class>
        <properties>
            <property name="host">localhost</property>
            <property name="port">9989</property>
        </properties>
    </ExceptionManager>
    <LoggerManager>
        <class>lsim.exceptions.remote.RemoteLoggerManager</class>
        <properties>
            <property name="host">localhost</property>
            <property name="port">9989</property>
        </properties>
    </LoggerManager>
    <Evaluators>
    ...
</Specification>


Published

30 January 2013

Tags