diff --git a/lib/Polysemy/Log.hs b/lib/Polysemy/Log.hs
--- a/lib/Polysemy/Log.hs
+++ b/lib/Polysemy/Log.hs
@@ -9,6 +9,7 @@
   -- * Arbitrary Data Messages
   -- $datalog
   DataLog(DataLog),
+  Logger,
   dataLog,
 
   -- ** Interpreters
@@ -65,7 +66,7 @@
 
 import Polysemy.Log.Atomic (interpretDataLogAtomic, interpretDataLogAtomic', interpretLogAtomic, interpretLogAtomic')
 import Polysemy.Log.Conc (interceptDataLogConc)
-import Polysemy.Log.Data.DataLog (DataLog (DataLog), dataLog)
+import Polysemy.Log.Data.DataLog (DataLog (DataLog), Logger, dataLog)
 import Polysemy.Log.Data.Log (Log (Log), crit, debug, error, info, log, trace, warn)
 import Polysemy.Log.Data.LogEntry (LogEntry (LogEntry))
 import Polysemy.Log.Data.LogMessage (LogMessage (LogMessage))
diff --git a/lib/Polysemy/Log/Data/DataLog.hs b/lib/Polysemy/Log/Data/DataLog.hs
--- a/lib/Polysemy/Log/Data/DataLog.hs
+++ b/lib/Polysemy/Log/Data/DataLog.hs
@@ -1,11 +1,18 @@
 {-# options_haddock prune #-}
--- |Description: Internal
 
+-- |Description: Internal
 module Polysemy.Log.Data.DataLog where
 
--- |Adapter for a logging backend.
+import Polysemy.Internal (send)
+import Polysemy.Time (GhcTime)
+
+import Polysemy.Log.Data.LogEntry (LogEntry, annotate)
+import Polysemy.Log.Data.LogMessage (LogMessage (LogMessage))
+import Polysemy.Log.Data.Severity (Severity (Crit, Debug, Error, Info, Trace, Warn))
+
+-- |Structural logs, used as a backend for the simpler 'Text' log effect, 'Polysemy.Log.Log'.
 --
--- Usually this is reinterpreted into an effect like those from /co-log/ or /di/, but it can be used purely for testing.
+-- Can also be used on its own, or reinterpreted into an effect like those from /co-log/ or /di/.
 data DataLog a :: Effect where
   -- |Schedule an arbitrary value for logging.
   DataLog :: a -> DataLog a m ()
@@ -14,3 +21,80 @@
   Local :: (a -> a) -> m b -> DataLog a m b
 
 makeSem ''DataLog
+
+-- |Alias for the logger with the default message type used by 'Polysemy.Log.Log'.
+type Logger =
+  DataLog (LogEntry LogMessage)
+
+-- |Log a text message with the given severity.
+-- Basic 'Sem' constructor.
+log ::
+  HasCallStack =>
+  Members [Logger, GhcTime] r =>
+  Severity ->
+  Text ->
+  Sem r ()
+log severity message =
+  withFrozenCallStack do
+    send . DataLog =<< annotate (LogMessage severity message)
+{-# inline log #-}
+
+-- |Log a text message with the 'Trace' severity.
+trace ::
+  HasCallStack =>
+  Members [Logger, GhcTime] r =>
+  Text ->
+  Sem r ()
+trace =
+  withFrozenCallStack (log Trace)
+{-# inline trace #-}
+
+-- |Log a text message with the 'Debug' severity.
+debug ::
+  HasCallStack =>
+  Members [Logger, GhcTime] r =>
+  Text ->
+  Sem r ()
+debug =
+  withFrozenCallStack (log Debug)
+{-# inline debug #-}
+
+-- |Log a text message with the 'Info' severity.
+info ::
+  HasCallStack =>
+  Members [Logger, GhcTime] r =>
+  Text ->
+  Sem r ()
+info =
+  withFrozenCallStack (log Info)
+{-# inline info #-}
+
+-- |Log a text message with the 'Warn' severity.
+warn ::
+  HasCallStack =>
+  Members [Logger, GhcTime] r =>
+  Text ->
+  Sem r ()
+warn =
+  withFrozenCallStack (log Warn)
+{-# inline warn #-}
+
+-- |Log a text message with the 'Error' severity.
+error ::
+  HasCallStack =>
+  Members [Logger, GhcTime] r =>
+  Text ->
+  Sem r ()
+error =
+  withFrozenCallStack (log Error)
+{-# inline error #-}
+
+-- |Log a text message with the 'Crit' severity.
+crit ::
+  HasCallStack =>
+  Members [Logger, GhcTime] r =>
+  Text ->
+  Sem r ()
+crit =
+  withFrozenCallStack (log Crit)
+{-# inline crit #-}
diff --git a/lib/Polysemy/Log/Data/Log.hs b/lib/Polysemy/Log/Data/Log.hs
--- a/lib/Polysemy/Log/Data/Log.hs
+++ b/lib/Polysemy/Log/Data/Log.hs
@@ -3,8 +3,8 @@
 
 import Polysemy.Internal (send)
 
-import Polysemy.Log.Data.Severity (Severity, Severity(Debug, Trace, Info, Warn, Error, Crit))
-import Polysemy.Log.Data.LogMessage (LogMessage(LogMessage))
+import Polysemy.Log.Data.LogMessage (LogMessage (LogMessage))
+import Polysemy.Log.Data.Severity (Severity (Crit, Debug, Error, Info, Trace, Warn))
 
 -- |The default high-level effect for simple text messages.
 -- To be used with the severity constructors:
diff --git a/lib/Polysemy/Log/Stdout.hs b/lib/Polysemy/Log/Stdout.hs
--- a/lib/Polysemy/Log/Stdout.hs
+++ b/lib/Polysemy/Log/Stdout.hs
@@ -97,10 +97,9 @@
   Members [Resource, Async, Race, Embed IO] r =>
   InterpreterFor Log r
 interpretLogStdoutConc =
-  interpretTimeGhc .
   interpretDataLogStdoutWith formatLogEntry .
   interpretLogDataLogConc 64 .
-  raiseUnder2
+  raiseUnder
 {-# inline interpretLogStdoutConc #-}
 
 -- |Like 'interpretLogStdout', but process messages concurrently.
@@ -109,9 +108,8 @@
   Maybe Severity ->
   InterpreterFor Log r
 interpretLogStdoutLevelConc level =
-  interpretTimeGhc .
   interpretDataLogStdoutWith formatLogEntry .
   setLogLevel level .
   interpretLogDataLogConc 64 .
-  raiseUnder2
+  raiseUnder
 {-# inline interpretLogStdoutLevelConc #-}
diff --git a/polysemy-log.cabal b/polysemy-log.cabal
--- a/polysemy-log.cabal
+++ b/polysemy-log.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           polysemy-log
-version:        0.4.1.0
+version:        0.4.2.0
 synopsis:       Polysemy Effects for Logging
 description:    See <https://hackage.haskell.org/package/polysemy-log/docs/Polysemy-Log.html>
 category:       Logging
