diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,8 @@
+0.8.3.0
+=======
+
+* Add `logKatipItem` function and reimplement `logItem` to use it. [vlatkoB](https://github.com/vlatkoB)
+
 0.8.2.0
 =======
 * Add `MonadFail` instances for `base` >= 4.9.0.0 [Koray Al](https://github.com/korayal)
diff --git a/katip.cabal b/katip.cabal
--- a/katip.cabal
+++ b/katip.cabal
@@ -1,5 +1,5 @@
 name:                katip
-version:             0.8.2.0
+version:             0.8.3.0
 synopsis:            A structured logging framework.
 description:
   Katip is a structured logging framework. See README.md for more details.
diff --git a/src/Katip.hs b/src/Katip.hs
--- a/src/Katip.hs
+++ b/src/Katip.hs
@@ -161,6 +161,7 @@
     , logT
     , logLoc
     , logItem
+    , logKatipItem
     , logException
     -- ** 'KatipContext': Logging With Context
     -- $katipcontextlogging
diff --git a/src/Katip/Core.hs b/src/Katip/Core.hs
--- a/src/Katip/Core.hs
+++ b/src/Katip/Core.hs
@@ -941,19 +941,29 @@
     -> m ()
 logItem a ns loc sev msg = do
     LogEnv{..} <- getLogEnv
-    liftIO $ do
-      item <- Item
-        <$> pure _logEnvApp
-        <*> pure _logEnvEnv
-        <*> pure sev
-        <*> (mkThreadIdText <$> myThreadId)
-        <*> pure _logEnvHost
-        <*> pure _logEnvPid
-        <*> pure a
-        <*> pure msg
-        <*> _logEnvTimer
-        <*> pure (_logEnvApp <> ns)
-        <*> pure loc
+    logKatipItem =<< liftIO
+      (Item <$> pure _logEnvApp
+            <*> pure _logEnvEnv
+            <*> pure sev
+            <*> (mkThreadIdText <$> myThreadId)
+            <*> pure _logEnvHost
+            <*> pure _logEnvPid
+            <*> pure a
+            <*> pure msg
+            <*> _logEnvTimer
+            <*> pure (_logEnvApp <> ns)
+            <*> pure loc)
+
+-- | Log already constructed 'Item'. This is the lowest level function that other log*
+--   functions use.
+--   It can be useful when implementing centralised logging services.
+logKatipItem
+    :: (A.Applicative m, LogItem a, Katip m)
+    => Item a
+    -> m ()
+logKatipItem item = do
+    LogEnv{..} <- getLogEnv
+    liftIO $
       FT.forM_ (M.elems _logEnvScribes) $ \ ScribeHandle {..} -> do
         whenM (scribePermitItem shScribe item) $
           void $ atomically (tryWriteTBQueue shChan (NewItem item))
