diff --git a/pom.xml b/pom.xml
index 709de70..22c8311 100644
--- a/pom.xml
+++ b/pom.xml
@@ -18,6 +18,8 @@
         <httpclient.version>4.3.5</httpclient.version>
         <spock-core.version>1.0-groovy-2.0-SNAPSHOT</spock-core.version>
         <commons-lang3.version>3.3.2</commons-lang3.version>
+        <slf4j-api.version>1.7.7</slf4j-api.version>
+        <logback-classic.version>1.0.13</logback-classic.version>
     </properties>
 
     <dependencies>
@@ -43,6 +45,16 @@
             <version>${commons-lang3.version}</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>${slf4j-api.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <version>${logback-classic.version}</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy b/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy
index c2bd629..dddf7b1 100644
--- a/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy
+++ b/src/main/groovy/pl/touk/mockserver/server/ContextExecutor.groovy
@@ -2,9 +2,11 @@ package pl.touk.mockserver.server
 
 import com.sun.net.httpserver.HttpExchange
 import groovy.transform.PackageScope
+import groovy.util.logging.Slf4j
 
 import java.util.concurrent.CopyOnWriteArrayList
 
+@Slf4j
 @PackageScope
 class ContextExecutor {
     private final HttpServerWraper httpServerWraper
@@ -18,7 +20,7 @@ class ContextExecutor {
         httpServerWraper.createContext(path, {
             HttpExchange ex ->
                 MockRequest request = new MockRequest(ex.requestBody.text, ex.requestHeaders, ex.requestURI)
-                println "Mock received input"
+                log.info("Mock received input")
                 for (Mock mock : mocks) {
                     try {
                         if (mock.match(ex.requestMethod, request)) {
diff --git a/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy b/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy
index 9238e57..17898bb 100644
--- a/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy
+++ b/src/main/groovy/pl/touk/mockserver/server/HttpMockServer.groovy
@@ -1,6 +1,7 @@
 package pl.touk.mockserver.server
 
 import com.sun.net.httpserver.HttpExchange
+import groovy.util.logging.Slf4j
 import groovy.util.slurpersupport.GPathResult
 import groovy.xml.MarkupBuilder
 
@@ -9,6 +10,7 @@ import java.util.concurrent.CopyOnWriteArraySet
 
 import static pl.touk.mockserver.server.Util.createResponse
 
+@Slf4j
 class HttpMockServer {
 
     private final HttpServerWraper httpServerWraper
@@ -101,7 +103,7 @@ class HttpMockServer {
         if (!(name in mockNames)) {
             throw new RuntimeException('mock not registered')
         }
-        println "Removing $name"
+        log.info("Removing mock $name")
         List<MockEvent> mockEvents = childServers.collect { it.removeMock(name) }.flatten()
         mockNames.remove(name)
         StringWriter sw = new StringWriter()
diff --git a/src/main/groovy/pl/touk/mockserver/server/HttpServerWraper.groovy b/src/main/groovy/pl/touk/mockserver/server/HttpServerWraper.groovy
index d8847ca..6c03051 100644
--- a/src/main/groovy/pl/touk/mockserver/server/HttpServerWraper.groovy
+++ b/src/main/groovy/pl/touk/mockserver/server/HttpServerWraper.groovy
@@ -3,9 +3,11 @@ package pl.touk.mockserver.server
 import com.sun.net.httpserver.HttpHandler
 import com.sun.net.httpserver.HttpServer
 import groovy.transform.PackageScope
+import groovy.util.logging.Slf4j
 
 import java.util.concurrent.Executors
 
+@Slf4j
 @PackageScope
 class HttpServerWraper {
     private final HttpServer httpServer
@@ -18,9 +20,9 @@ class HttpServerWraper {
         InetSocketAddress addr = new InetSocketAddress(Inet4Address.getByName("0.0.0.0"), port)
         httpServer = HttpServer.create(addr, 0)
         httpServer.executor = Executors.newCachedThreadPool()
-        println("Http server statrting on port $port...")
+        log.info("Http server statrting on port $port...")
         httpServer.start()
-        println('Http server is started')
+        log.info('Http server is started')
     }
 
     void createContext(String context, HttpHandler handler) {
@@ -34,7 +36,7 @@ class HttpServerWraper {
         } else {
             executors << new ContextExecutor(this, mock)
         }
-        println "Added mock ${mock.name}"
+        log.info("Added mock ${mock.name}")
     }
 
     void stop() {
diff --git a/src/main/groovy/pl/touk/mockserver/server/Main.groovy b/src/main/groovy/pl/touk/mockserver/server/Main.groovy
index 0923ba9..154eefe 100644
--- a/src/main/groovy/pl/touk/mockserver/server/Main.groovy
+++ b/src/main/groovy/pl/touk/mockserver/server/Main.groovy
@@ -1,13 +1,16 @@
 package pl.touk.mockserver.server
 
+import groovy.util.logging.Slf4j
+
+@Slf4j
 class Main {
     static void main(String[] args) {
         HttpMockServer httpMockServer = new HttpMockServer()
 
         Runtime.runtime.addShutdownHook(new Thread({
-            println 'Http server is stopping...'
+            log.info('Http server is stopping...')
             httpMockServer.stop()
-            println 'Http server is stopped'
+            log.info('Http server is stopped')
         } as Runnable))
 
         while (true) {
diff --git a/src/main/groovy/pl/touk/mockserver/server/Mock.groovy b/src/main/groovy/pl/touk/mockserver/server/Mock.groovy
index 33e9c3c..5408c15 100644
--- a/src/main/groovy/pl/touk/mockserver/server/Mock.groovy
+++ b/src/main/groovy/pl/touk/mockserver/server/Mock.groovy
@@ -2,11 +2,13 @@ package pl.touk.mockserver.server
 
 import groovy.transform.EqualsAndHashCode
 import groovy.transform.PackageScope
+import groovy.util.logging.Slf4j
 
 import java.util.concurrent.CopyOnWriteArrayList
 
 @PackageScope
 @EqualsAndHashCode(excludes = ["counter"])
+@Slf4j
 class Mock implements Comparable<Mock> {
     final String name
     final String path
@@ -34,7 +36,7 @@ class Mock implements Comparable<Mock> {
     }
 
     MockResponse apply(MockRequest request) {
-        println "Mock $name invoked"
+        log.debug("Mock $name invoked")
         ++counter
         String responseText = response(request)
         String response = soap ? wrapSoap(responseText) : responseText
diff --git a/src/test/groovy/pl/touk/mockserver/tests/ServerMockPT.groovy b/src/test/groovy/pl/touk/mockserver/tests/ServerMockPT.groovy
index 1fd932a..22e656a 100644
--- a/src/test/groovy/pl/touk/mockserver/tests/ServerMockPT.groovy
+++ b/src/test/groovy/pl/touk/mockserver/tests/ServerMockPT.groovy
@@ -46,7 +46,7 @@ class ServerMockPT extends Specification {
             threads*.start()
             Thread.sleep(60000)
         then:
-            responses.eachWithIndex { res, i -> println "Checking $i"; assert res.name() == "goodResponse$i" }
+            responses.eachWithIndex { res, i -> assert res.name() == "goodResponse$i" }
         cleanup:
             httpMockServer.stop()
     }