Logging with LSim Report anything
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>