diff --git a/hp.asd b/hp.asd
index 4b5d019..da3b510 100644
--- a/hp.asd
+++ b/hp.asd
@@ -8,3 +8,4 @@
   :in-order-to ((test-op (test-op "hp-tests"))))
 
 (register-system-packages "lack-middleware-static" '(:lack.middleware.static))
+(register-system-packages "lack-middleware-accesslog" '(:lack.middleware.accesslog))
diff --git a/qlfile b/qlfile
index b5ae7d4..ff47156 100644
--- a/qlfile
+++ b/qlfile
@@ -4,3 +4,4 @@ ql cl-jingle
 git piccolo https://github.com/skyizwhite/piccolo.git
 git ningle-fbr https://github.com/skyizwhite/ningle-fbr.git
 ql cl-ppcre
+ql log4cl
diff --git a/qlfile.lock b/qlfile.lock
index 949a250..1930ef4 100644
--- a/qlfile.lock
+++ b/qlfile.lock
@@ -26,3 +26,7 @@
  (:class qlot/source/ql:source-ql
   :initargs (:%version :latest)
   :version "ql-2023-10-21"))
+("log4cl" .
+ (:class qlot/source/ql:source-ql
+  :initargs (:%version :latest)
+  :version "ql-2023-10-21"))
diff --git a/src/app.lisp b/src/app.lisp
index c34f727..76963cf 100644
--- a/src/app.lisp
+++ b/src/app.lisp
@@ -32,8 +32,9 @@
                      :directory "src/routes")
   (jg:static-path *app* "/assets/" "src/assets/")
   (jg:install-middleware *app* mw:*public-files*)
+  (jg:install-middleware *app* mw:*recovery*)
   (jg:install-middleware *app* mw:*normalize-path*)
-  (jg:install-middleware *app* mw:*recovery*))
+  (jg:install-middleware *app* mw:*accesslog*))
 
 (defun update ()
   (stop)
diff --git a/src/middlewares/accesslog.lisp b/src/middlewares/accesslog.lisp
new file mode 100644
index 0000000..0ec8ac2
--- /dev/null
+++ b/src/middlewares/accesslog.lisp
@@ -0,0 +1,14 @@
+(defpackage #:hp/middlewares/accesslog
+  (:use #:cl)
+  (:import-from #:lack.middleware.accesslog
+                #:*lack-middleware-accesslog*)
+  (:import-from #:log4cl)
+  (:export *accesslog*))
+(in-package #:hp/middlewares/accesslog)
+
+(defparameter *accesslog*
+  (lambda (app)
+    (funcall *lack-middleware-accesslog*
+             app
+             :logger (lambda (message)
+                       (log:info message)))))
diff --git a/src/middlewares/recovery.lisp b/src/middlewares/recovery.lisp
index 91f9214..0f15496 100644
--- a/src/middlewares/recovery.lisp
+++ b/src/middlewares/recovery.lisp
@@ -1,15 +1,15 @@
 (defpackage #:hp/middlewares/recovery
   (:use #:cl)
+  (:import-from #:log4cl)
   (:export #:*recovery*))
 (in-package #:hp/middlewares/recovery)
 
-;;; TODO: insert logger
-
 (defparameter *recovery*
   (lambda (app)
     (lambda (env)
       (handler-case
           (funcall app env)
         (error (c)
+          (log:error "Unhandled error caught: ~a" c)
           `(500 (:content-type "text/plain")
-                (,(format nil "Internal Server Error: ~a~%" c))))))))
+                ("Internal Server Error")))))))