Index: /trunk/pom.xml
===================================================================
--- /trunk/pom.xml	(revision 48)
+++ /trunk/pom.xml	(revision 49)
@@ -56,4 +56,14 @@
 			<version>4.11</version>
 		</dependency>
+		<dependency>
+			<groupId>log4j</groupId>
+			<artifactId>log4j</artifactId>
+			<version>1.2.16</version>
+		</dependency>
+		<dependency>
+			<groupId>log4j</groupId>
+			<artifactId>apache-log4j-extras</artifactId>
+			<version>1.1</version>
+		</dependency>
 	</dependencies>
 	<build>
Index: /trunk/src/main/java/omq/client/listener/ResponseListener.java
===================================================================
--- /trunk/src/main/java/omq/client/listener/ResponseListener.java	(revision 48)
+++ /trunk/src/main/java/omq/client/listener/ResponseListener.java	(revision 49)
@@ -6,4 +6,6 @@
 import java.util.Map;
 import java.util.Properties;
+
+import org.apache.log4j.Logger;
 
 import omq.client.proxy.Proxymq;
@@ -26,4 +28,5 @@
  */
 public class ResponseListener extends Thread {
+	private static final Logger logger = Logger.getLogger(ResponseListener.class.getName());
 	private static ResponseListener rListener;
 
@@ -78,7 +81,7 @@
 				}
 			} catch (InterruptedException i) {
-				i.printStackTrace();
+				logger.error(i.toString(), i);
 			} catch (ShutdownSignalException e) {
-				e.printStackTrace();
+				logger.error(e.toString(), e);
 				try {
 					if (channel.isOpen()) {
@@ -92,11 +95,11 @@
 						Thread.sleep(milis);
 					} catch (InterruptedException e2) {
-						e2.printStackTrace();
+						logger.error(e2.toString(), e2);
 					}
 				}
 			} catch (ConsumerCancelledException e) {
-				e.printStackTrace();
+				logger.error(e.toString(), e);
 			} catch (Exception e) {
-				e.printStackTrace();
+				logger.error(e.toString(), e);
 			}
 		}
@@ -201,4 +204,5 @@
 	 */
 	public void kill() throws IOException {
+		logger.warn("Killing ResponseListener");
 		interrupt();
 		killed = true;
Index: unk/src/main/java/omq/client/proxy/CallType.java
===================================================================
--- /trunk/src/main/java/omq/client/proxy/CallType.java	(revision 48)
+++ 	(revision )
@@ -1,12 +1,0 @@
-package omq.client.proxy;
-
-/**
- * CallType is an enumeration with the call types you can do: synchronous calls
- * and asynchronous calls
- * 
- * @author Sergi Toda <sergi.toda@estudiants.urv.cat>
- * 
- */
-public enum CallType {
-	SYNC, ASYNC;
-}
Index: /trunk/src/main/java/omq/client/proxy/Proxymq.java
===================================================================
--- /trunk/src/main/java/omq/client/proxy/Proxymq.java	(revision 48)
+++ /trunk/src/main/java/omq/client/proxy/Proxymq.java	(revision 49)
@@ -10,4 +10,6 @@
 import java.util.Map;
 import java.util.Properties;
+
+import org.apache.log4j.Logger;
 
 import omq.Remote;
@@ -44,4 +46,5 @@
 	 */
 	private static final long serialVersionUID = 1L;
+	private static final Logger logger = Logger.getLogger(Proxymq.class.getName());
 	private static Map<String, Object> proxies = new Hashtable<String, Object>();
 
@@ -132,8 +135,8 @@
 		// Publish the request
 		if (request.isAsync()) {
-			System.out.println("Publish async request -> " + request.getId());
+			logger.debug("Publish async request -> " + request.getId());
 			publishAsyncRequest(request);
 		} else {
-			System.out.println("Publish sync request -> " + request.getId());
+			logger.debug("Publish sync request -> " + request.getId());
 			response = publishSyncRequest(request, method.getReturnType());
 
@@ -186,6 +189,5 @@
 				return getResult(corrId, timeout, type);
 			} catch (TimeoutException te) {
-				System.out.println("Timeout exception catched " + te);
-				te.printStackTrace();
+				logger.error(te);
 			}
 			i++;
@@ -292,5 +294,4 @@
 	public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, Proxymq proxy) {
 		if (proxies.containsKey(proxy.getRef())) {
-			System.out.println("Proxy trobat");
 			return proxies.get(proxy.getRef());
 		}
Index: /trunk/src/main/java/omq/common/broker/Broker.java
===================================================================
--- /trunk/src/main/java/omq/common/broker/Broker.java	(revision 48)
+++ /trunk/src/main/java/omq/common/broker/Broker.java	(revision 49)
@@ -2,4 +2,5 @@
 
 import java.io.IOException;
+import java.net.URL;
 import java.util.HashMap;
 import java.util.Map;
@@ -20,4 +21,7 @@
 import omq.server.RemoteObject;
 
+import org.apache.log4j.Logger;
+import org.apache.log4j.xml.DOMConfigurator;
+
 import com.rabbitmq.client.Channel;
 import com.rabbitmq.client.Connection;
@@ -28,4 +32,7 @@
 
 public class Broker {
+
+	private static final Logger logger = Logger.getLogger(Broker.class.getName());
+
 	private static Connection connection;
 	private static Channel channel;
@@ -45,4 +52,9 @@
 	public static synchronized void initBroker(Properties env) throws Exception {
 		if (environment == null) {
+
+			// Load log4j configuration
+			URL log4jResource = Broker.class.getResource("/log4j.xml");
+			DOMConfigurator.configure(log4jResource);
+
 			remoteObjs = new HashMap<String, RemoteObject>();
 			environment = env;
@@ -58,9 +70,11 @@
 			}
 		} else {
-			throw new InitBrokerException("Broker already started");
+			logger.error("Broker is already started");
+			throw new InitBrokerException("Broker is already started");
 		}
 	}
 
 	public static void stopBroker() throws Exception {
+		logger.warn("Stopping broker");
 		// Stop the client
 		if (clientStarted) {
@@ -93,4 +107,5 @@
 
 	public static void closeConnection() throws IOException {
+		logger.warn("Clossing connection");
 		connectionClosed = true;
 		connection.close();
@@ -241,4 +256,5 @@
 			@Override
 			public void shutdownCompleted(ShutdownSignalException cause) {
+				logger.warn("Shutdown message received. Cause: " + cause.getMessage());
 				if (!connectionClosed)
 					if (cause.isHardError()) {
Index: /trunk/src/main/java/omq/common/event/EventDispatcher.java
===================================================================
--- /trunk/src/main/java/omq/common/event/EventDispatcher.java	(revision 48)
+++ /trunk/src/main/java/omq/common/event/EventDispatcher.java	(revision 49)
@@ -9,4 +9,6 @@
 import omq.common.util.ParameterQueue;
 import omq.common.util.Serializer;
+
+import org.apache.log4j.Logger;
 
 import com.rabbitmq.client.Channel;
@@ -26,4 +28,5 @@
 @SuppressWarnings("rawtypes")
 public class EventDispatcher extends Thread {
+	private static final Logger logger = Logger.getLogger(EventDispatcher.class.getName());
 	private static EventDispatcher dispatcher;
 
@@ -67,4 +70,5 @@
 
 	public static void stopEventDispatcher() throws Exception {
+		logger.warn("Stopping EventDispatcher");
 		dispatcher.setListeners(null);
 		dispatcher.killed = true;
@@ -102,5 +106,5 @@
 				event = Serializer.deserializeEvent(delivery.getBody());
 
-				System.out.println("Event received -> Topic: " + event.getTopic() + "CorrId: " + event.getCorrId());
+				logger.info("Event received -> Topic: " + event.getTopic() + "CorrId: " + event.getCorrId());
 				// Log.saveLog("Client-Deserialize", delivery.getBody());
 
@@ -112,9 +116,7 @@
 				dispatch(event.getTopic(), event);
 			} catch (InterruptedException i) {
-				System.out.println("InterruptedException e: " + i);
-				i.printStackTrace();
+				logger.error(i);
 			} catch (ShutdownSignalException e) {
-				System.out.println("ShutdownSignalException e: " + e);
-				e.printStackTrace();
+				logger.error(e);
 				try {
 					if (channel.isOpen()) {
@@ -127,14 +129,12 @@
 						Thread.sleep(milis);
 					} catch (InterruptedException e2) {
-						e2.printStackTrace();
+						logger.error(e2);
 					}
-					e1.printStackTrace();
+					logger.error(e1);
 				}
 			} catch (ConsumerCancelledException e) {
-				System.out.println("ConsumerCancelledException e: " + e);
-				e.printStackTrace();
+				logger.error(e);
 			} catch (Exception e) {
-				System.out.println("Exception e: " + e);
-				e.printStackTrace();
+				logger.error(e);
 			}
 		}
@@ -160,5 +160,5 @@
 			String reference = e.getTopic();
 
-			System.out.println("EventDispatcher declaring fanout -> " + reference + " Binding with: " + queueName);
+			logger.info("Declaring fanout -> " + reference + " Binding with: " + queueName);
 
 			channel.exchangeDeclare(reference, "fanout");
Index: /trunk/src/main/java/omq/common/util/OmqConnectionFactory.java
===================================================================
--- /trunk/src/main/java/omq/common/util/OmqConnectionFactory.java	(revision 48)
+++ /trunk/src/main/java/omq/common/util/OmqConnectionFactory.java	(revision 49)
@@ -5,4 +5,6 @@
 import java.security.NoSuchAlgorithmException;
 import java.util.Properties;
+
+import org.apache.log4j.Logger;
 
 import com.rabbitmq.client.Channel;
@@ -16,4 +18,6 @@
  */
 public class OmqConnectionFactory {
+	private static final Logger logger = Logger.getLogger(OmqConnectionFactory.class.getName());
+
 	private static Connection connection;
 	private static int connectionTimeout = 2 * 1000;
@@ -34,5 +38,5 @@
 				working = true;
 			} catch (Exception e) {
-				e.printStackTrace();
+				logger.error(e);
 				long milis = Long.parseLong(env.getProperty(ParameterQueue.RETRY_TIME_CONNECTION, "2000"));
 				Thread.sleep(milis);
@@ -64,9 +68,15 @@
 			factory.useSslProtocol();
 		}
-		return factory.newConnection();
+
+		Connection connection = factory.newConnection();
+		logger.info("New connection created using: username: " + username + ", host: " + host + ", port: " + port + ", connection timeout: "
+				+ connectionTimeout + " SSL enabled: " + ssl);
+		return connection;
 	}
 
 	public static Channel getNewChannel() throws IOException {
-		return connection.createChannel();
+		Channel channel = connection.createChannel();
+		logger.info("New channel created using the default connection");
+		return channel;
 	}
 }
Index: /trunk/src/main/java/omq/common/util/Serializer.java
===================================================================
--- /trunk/src/main/java/omq/common/util/Serializer.java	(revision 48)
+++ /trunk/src/main/java/omq/common/util/Serializer.java	(revision 49)
@@ -3,4 +3,6 @@
 import java.io.IOException;
 import java.util.Properties;
+
+import org.apache.log4j.Logger;
 
 import omq.common.broker.Broker;
@@ -21,4 +23,5 @@
  */
 public class Serializer {
+	private static final Logger logger = Logger.getLogger(Serializer.class.getName());
 	public static String kryo = "kryo";
 	public static String java = "java";
@@ -158,4 +161,5 @@
 
 	public static void removeSerializers() {
+		logger.warn("Removing serializers");
 		serializer = null;
 		kryoSerializer = null;
Index: /trunk/src/main/java/omq/common/util/Serializers/GsonImp.java
===================================================================
--- /trunk/src/main/java/omq/common/util/Serializers/GsonImp.java	(revision 48)
+++ /trunk/src/main/java/omq/common/util/Serializers/GsonImp.java	(revision 49)
@@ -22,5 +22,4 @@
 	public byte[] serialize(Object obj) throws SerializerException {
 		String json = gson.toJson(obj);
-		System.out.println(json);
 		return json.getBytes();
 	}
Index: /trunk/src/main/java/omq/server/InvocationThread.java
===================================================================
--- /trunk/src/main/java/omq/server/InvocationThread.java	(revision 48)
+++ /trunk/src/main/java/omq/server/InvocationThread.java	(revision 49)
@@ -8,4 +8,6 @@
 import omq.common.util.Serializer;
 import omq.exception.OmqException;
+
+import org.apache.log4j.Logger;
 
 import com.rabbitmq.client.AMQP.BasicProperties;
@@ -19,4 +21,5 @@
  */
 public class InvocationThread extends Thread {
+	private static final Logger logger = Logger.getLogger(InvocationThread.class.getName());
 	private RemoteObject obj;
 	private BlockingQueue<Delivery> deliveryQueue;
@@ -44,5 +47,5 @@
 				String requestID = request.getId();
 
-				System.out.println("Invoke method: " + methodName + " CorrID: " + requestID);
+				logger.debug("Object: " + obj.getRef() + ", method: " + methodName + " corrID: " + requestID);
 
 				// Invoke the method
@@ -53,6 +56,8 @@
 				} catch (InvocationTargetException e) {
 					Throwable throwable = e.getTargetException();
+					logger.error("Object: " + obj.getRef() + " at method: " + methodName + ", corrID" + requestID, throwable);
 					error = new OmqException(throwable.getClass().getCanonicalName(), throwable.getMessage());
 				} catch (NoSuchMethodException e) {
+					logger.error("Object: " + obj.getRef() + " cannot find method: " + methodName);
 					error = new OmqException(e.getClass().getCanonicalName(), e.getMessage());
 				}
@@ -75,9 +80,8 @@
 
 			} catch (InterruptedException i) {
-				i.printStackTrace();
+				logger.error(i);
 				killed = true;
 			} catch (Exception e) {
-				System.out.println("Error a l'Invocation Thread \nException: " + e);
-				e.printStackTrace();
+				logger.error("Object: " + obj.getRef(), e);
 			}
 
Index: /trunk/src/main/java/omq/server/RemoteObject.java
===================================================================
--- /trunk/src/main/java/omq/server/RemoteObject.java	(revision 48)
+++ /trunk/src/main/java/omq/server/RemoteObject.java	(revision 49)
@@ -10,4 +10,6 @@
 import java.util.Properties;
 
+import org.apache.log4j.Logger;
+
 import omq.Remote;
 import omq.common.broker.Broker;
@@ -33,4 +35,5 @@
 
 	private static final long serialVersionUID = -1778953938739846450L;
+	private static final Logger logger = Logger.getLogger(RemoteObject.class.getName());
 
 	private String UID;
@@ -85,10 +88,12 @@
 			try {
 				Delivery delivery = consumer.nextDelivery();
-				System.out.println("RemoteObject: " + UID + " has received a message");
+
+				logger.debug(UID + " has received a message");
+
 				remoteWrapper.notifyDelivery(delivery);
 			} catch (InterruptedException i) {
-				i.printStackTrace();
+				logger.error(i);
 			} catch (ShutdownSignalException e) {
-				e.printStackTrace();
+				logger.error(e);
 				try {
 					if (channel.isOpen()) {
@@ -101,14 +106,14 @@
 						Thread.sleep(milis);
 					} catch (InterruptedException e2) {
-						e2.printStackTrace();
-					}
-					e1.printStackTrace();
+						logger.error(e2);
+					}
+					logger.error(e1);
 				}
 			} catch (ConsumerCancelledException e) {
-				e.printStackTrace();
+				logger.error(e);
 			} catch (SerializerException e) {
-				e.printStackTrace();
+				logger.error(e);
 			} catch (Exception e) {
-				e.printStackTrace();
+				logger.error(e);
 			}
 		}
@@ -129,4 +134,5 @@
 
 	public void kill() throws IOException {
+		logger.warn("Killing objectmq: " + this.getRef());
 		killed = true;
 		interrupt();
@@ -218,5 +224,5 @@
 
 		// Declares and bindings
-		System.out.println("RemoteObject: " + UID + " declaring direct exchange: " + exchange + ", Queue: " + queue);
+		logger.info("RemoteObject: " + UID + " declaring direct exchange: " + exchange + ", Queue: " + queue);
 		channel.exchangeDeclare(exchange, "direct");
 		channel.queueDeclare(queue, durable, false, false, null);
@@ -224,5 +230,5 @@
 
 		// Declare the event topic fanout
-		System.out.println("RemoteObject: " + UID + " declaring fanout exchange: " + UID);
+		logger.info("RemoteObject: " + UID + " declaring fanout exchange: " + UID);
 		channel.exchangeDeclare(UID, "fanout");
 
Index: /trunk/src/main/java/omq/server/RemoteWrapper.java
===================================================================
--- /trunk/src/main/java/omq/server/RemoteWrapper.java	(revision 48)
+++ /trunk/src/main/java/omq/server/RemoteWrapper.java	(revision 49)
@@ -4,4 +4,6 @@
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.LinkedBlockingDeque;
+
+import org.apache.log4j.Logger;
 
 import com.rabbitmq.client.QueueingConsumer;
@@ -14,4 +16,6 @@
  */
 public class RemoteWrapper {
+	private static final Logger logger = Logger.getLogger(RemoteWrapper.class.getName());
+
 	private RemoteObject obj;
 	private int numThreads;
@@ -25,5 +29,5 @@
 		deliveryQueue = new LinkedBlockingDeque<QueueingConsumer.Delivery>();
 
-		System.out.println("RemoteWrapper -> Object: " + obj.getRef() + ", numthreads listening = " + numThreads);
+		logger.info("Object reference: " + obj.getRef() + ", numthreads listening = " + numThreads);
 
 		for (int i = 0; i < numThreads; i++) {
@@ -39,4 +43,5 @@
 
 	public void stopRemoteWrapper() {
+		logger.warn("Stopping Invocation threads vinculed to " + obj.getRef());
 		for (InvocationThread thread : invocationList) {
 			thread.interrupt();
Index: /trunk/src/main/resources/log4j.xml
===================================================================
--- /trunk/src/main/resources/log4j.xml	(revision 49)
+++ /trunk/src/main/resources/log4j.xml	(revision 49)
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+    <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
+        <param name="Threshold" value="DEBUG" />
+        <layout class="org.apache.log4j.PatternLayout">
+            <param name="ConversionPattern" value="%d{[yyyy-MM-dd HH:mm:ss]} %-5p %c{1}:%L - %m%n" />
+        </layout>
+    </appender>
+
+    <appender class="org.apache.log4j.rolling.RollingFileAppender" name="A2">
+        <param value="true" name="append"/>
+        <param value="logs/objectmq-temp.log" name="File"/>
+
+        <rollingPolicy class="org.apache.log4j.rolling.FixedWindowRollingPolicy">
+            <param name="fileNamePattern" value="logs/objectmq-%i.log" />
+            <param name="MinIndex" value="0"/> 
+            <param name="MaxIndex" value="1"/> 
+        </rollingPolicy>
+        
+        <triggeringPolicy class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy"> 
+            <param name="MaxFileSize" value="10000000"/> 
+        </triggeringPolicy> 
+        
+        <layout class="org.apache.log4j.PatternLayout">
+            <param value="%d{[yyyy-MM-dd HH:mm:ss]} %-5p %c{1}:%L - %m%n" name="ConversionPattern"/>
+        </layout>        
+    </appender>
+
+  <root> 
+    <priority value ="debug" /> 
+    <appender-ref ref="consoleAppender" />
+    <appender-ref ref="A2" />  
+  </root>
+  
+</log4j:configuration>
Index: /trunk/target/classes/log4j.xml
===================================================================
--- /trunk/target/classes/log4j.xml	(revision 49)
+++ /trunk/target/classes/log4j.xml	(revision 49)
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+
+<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
+    <appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
+        <param name="Threshold" value="DEBUG" />
+        <layout class="org.apache.log4j.PatternLayout">
+            <param name="ConversionPattern" value="%d{[yyyy-MM-dd HH:mm:ss]} %-5p %c{1}:%L - %m%n" />
+        </layout>
+    </appender>
+
+    <appender class="org.apache.log4j.rolling.RollingFileAppender" name="A2">
+        <param value="true" name="append"/>
+        <param value="logs/objectmq-temp.log" name="File"/>
+
+        <rollingPolicy class="org.apache.log4j.rolling.FixedWindowRollingPolicy">
+            <param name="fileNamePattern" value="logs/objectmq-%i.log" />
+            <param name="MinIndex" value="0"/> 
+            <param name="MaxIndex" value="1"/> 
+        </rollingPolicy>
+        
+        <triggeringPolicy class="org.apache.log4j.rolling.SizeBasedTriggeringPolicy"> 
+            <param name="MaxFileSize" value="10000000"/> 
+        </triggeringPolicy> 
+        
+        <layout class="org.apache.log4j.PatternLayout">
+            <param value="%d{[yyyy-MM-dd HH:mm:ss]} %-5p %c{1}:%L - %m%n" name="ConversionPattern"/>
+        </layout>        
+    </appender>
+
+  <root> 
+    <priority value ="debug" /> 
+    <appender-ref ref="consoleAppender" />
+    <appender-ref ref="A2" />  
+  </root>
+  
+</log4j:configuration>
