packages feed

unclogging-0.1.0.0: app/Main.hs

{-# LANGUAGE OverloadedLists #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}

module Main where

import Control.Carrier.Unclog (runUnclogging)
import Control.Effect.Unclog.Json qualified as FusedJson
import Control.Effect.Unclog.Text qualified as FusedText
import Control.Monad (replicateM_, void)
import Data.Aeson (Value (String), (.=))
import Data.String (fromString)
import Unclog
import Unclog.IO.Json qualified as IO
import UnliftIO (Concurrently (Concurrently, runConcurrently))

main :: IO ()
main = do
  let subs = [colourSubscriber Debug stdout, simpleSubscriber Fatal stderr, fileSubscriber Debug "bla.log"]
  withLoggingWithSubscribers subs \logger -> do
    let spawnTask (i :: Int) = do
          $IO.info logger ["msg" .= String ("I am task " <> fromString (show i))]
          replicateM_ 2 do
            replicateM_ 2 do
              $IO.debug logger ["msg" .= String ("debugging from " <> fromString (show i))]
            $IO.warn logger ["warning" .= String ("warning from " <> fromString (show i))]
          $IO.fatal logger ["error" .= String ("fatal from " <> fromString (show i))]
    void $ runConcurrently $ traverse @[] (Concurrently . spawnTask) [1 .. 5]

  runUnclogging subs do
    let spawnTask (i :: Int) = do
          $FusedJson.info ["msg" .= String ("I am task " <> fromString (show i))]
          replicateM_ 2 do
            replicateM_ 2 do
              $FusedJson.debug ["msg" .= String ("debugging from " <> fromString (show i))]
            $FusedJson.warn ["warning" .= String ("warning from " <> fromString (show i))]
          $FusedJson.fatal ["error" .= String ("fatal from " <> fromString (show i))]
    void $ runConcurrently $ traverse @[] (Concurrently . spawnTask) [1 .. 5]
  runUnclogging subs do
    let spawnTask (i :: Int) = do
          $FusedText.info ("I am task " <> fromString (show i))
          replicateM_ 2 do
            replicateM_ 2 do
              $FusedText.debug ("debugging from " <> fromString (show i))
            $FusedText.warn ("warning from " <> fromString (show i))
          $FusedText.fatal ("fatal from " <> fromString (show i))
    void $ runConcurrently $ traverse @[] (Concurrently . spawnTask) [1 .. 5]