diff --git a/src/main/java/net/onrc/onos/apps/proxyarp/ProxyArpManager.java b/src/main/java/net/onrc/onos/apps/proxyarp/ProxyArpManager.java
index d276691..28efb33 100644
--- a/src/main/java/net/onrc/onos/apps/proxyarp/ProxyArpManager.java
+++ b/src/main/java/net/onrc/onos/apps/proxyarp/ProxyArpManager.java
@@ -132,7 +132,7 @@
                 arpCache.update(targetIpAddress,
                         MACAddress.valueOf(value.getTargetMacAddress()));
             } catch (UnknownHostException e) {
-                log.error("Exception: ", e);
+                log.error("Unknown host", e);
             }
         }
 
@@ -143,7 +143,7 @@
             try {
                 arpCache.remove(InetAddress.getByAddress(value.getTargetAddress()));
             } catch (UnknownHostException e) {
-                log.error("Exception: ", e);
+                log.error("Unknown host", e);
             }
         }
 
@@ -158,7 +158,7 @@
                 arpCache.update(targetIpAddress,
                         MACAddress.valueOf(value.getTargetMacAddress()));
             } catch (UnknownHostException e) {
-                log.error("Exception: ", e);
+                log.error("Unknown host", e);
             }
         }
     }
@@ -393,7 +393,7 @@
             arpCacheEventChannel.addEntry(InetAddress.getByAddress(
                     arp.getSenderProtocolAddress()).toString(), arpCacheNotification);
         } catch (UnknownHostException e) {
-            log.error("Exception : ", e);
+            log.error("Unknown host", e);
         }
     }
 
diff --git a/src/main/java/net/onrc/onos/apps/sdnip/PtreeNode.java b/src/main/java/net/onrc/onos/apps/sdnip/PtreeNode.java
index b54546c..912db1c 100644
--- a/src/main/java/net/onrc/onos/apps/sdnip/PtreeNode.java
+++ b/src/main/java/net/onrc/onos/apps/sdnip/PtreeNode.java
@@ -33,7 +33,7 @@
                     log.debug(octet + ": filling key[{}] {}", i, key[i]);
                     this.key[i] = key[i];
                 } else {
-                    log.debug("no filling, null key", i);
+                    log.debug("no filling, null key");
                 }
             } else {
                 log.debug("filling key {} as 0", i);
diff --git a/src/main/java/net/onrc/onos/core/flowprogrammer/FlowPusher.java b/src/main/java/net/onrc/onos/core/flowprogrammer/FlowPusher.java
index 2c64ec1..98c2f97 100644
--- a/src/main/java/net/onrc/onos/core/flowprogrammer/FlowPusher.java
+++ b/src/main/java/net/onrc/onos/core/flowprogrammer/FlowPusher.java
@@ -168,7 +168,7 @@
         boolean add(SwitchQueueEntry entry, MsgPriority priority) {
             Queue<SwitchQueueEntry> queue = getQueue(priority);
             if (queue == null) {
-                log.error("Unexpected priority : ", priority);
+                log.error("Unexpected priority: {}", priority);
                 return false;
             }
             return queue.add(entry);
@@ -197,7 +197,7 @@
                     return entry;
                 }
                 default:
-                    log.error("Unexpected QueueState : ", state);
+                    log.error("Unexpected QueueState: {}", state);
                     return null;
             }
         }
@@ -220,7 +220,7 @@
                     // Only checking high priority queue
                     return (!getQueue(MsgPriority.HIGH).isEmpty());
                 default:
-                    log.error("Unexpected QueueState : ", state);
+                    log.error("Unexpected QueueState: {}", state);
                     return false;
             }
 
@@ -378,7 +378,7 @@
                     try {
                         messageDamper.write(sw, msg, context);
                         if (log.isTraceEnabled()) {
-                            log.trace("Pusher sends message : {}", msg);
+                            log.trace("Pusher sends message: {}", msg);
                         }
                         size += msg.getLength();
                     } catch (IOException e) {
@@ -504,7 +504,7 @@
         SwitchQueue queue = getQueue(sw);
 
         if (queue == null) {
-            log.error("No queue is attached to DPID : {}", sw.getId());
+            log.error("No queue is attached to DPID: {}", sw.getId());
             return false;
         }
 
@@ -983,7 +983,7 @@
         synchronized (queue) {
             queue.add(entry, priority);
             if (log.isTraceEnabled()) {
-                log.trace("Message is pushed : {}", entry.getOFMessage());
+                log.trace("Message is pushed: {}", entry.getOFMessage());
             }
         }
 
@@ -1002,10 +1002,10 @@
         try {
             return future.get();
         } catch (InterruptedException e) {
-            log.error("InterruptedException:", e);
+            log.error("InterruptedException", e);
             return null;
         } catch (ExecutionException e) {
-            log.error("ExecutionException:", e);
+            log.error("ExecutionException", e);
             return null;
         }
     }
@@ -1096,12 +1096,12 @@
     @Override
     public Command receive(IOFSwitch sw, OFMessage msg, FloodlightContext cntx) {
         if (log.isTraceEnabled()) {
-            log.trace("Received BARRIER_REPLY from : {}", sw.getId());
+            log.trace("Received BARRIER_REPLY from: {}", sw.getId());
         }
 
         if ((msg.getType() != OFType.BARRIER_REPLY) ||
             !(msg instanceof OFBarrierReply)) {
-            log.error("Unexpected reply message : {}", msg.getType());
+            log.error("Unexpected reply message: {}", msg.getType());
             return Command.CONTINUE;
         }
 
