Haskell:
Логування
Як це робити:
В Haskell логування можливе за допомогою бібліотек, таких як monad-logger
або hslogger
. Ось швидкий приклад використання monad-logger
:
{-# LANGUAGE OverloadedStrings #-}
import Control.Monad.Logger
import Control.Monad.IO.Class (liftIO)
logExample :: LoggingT IO ()
logExample = do
logInfoN "Запускаємо аплікацію..."
liftIO $ putStrLn "Виконуємо критично важливу роботу..."
logErrorN "Ой! Виникла якась проблема."
main :: IO ()
main = runStdoutLoggingT logExample
{- Приклад виводу
[Info] Запускаємо аплікацію...
Виконуємо критично важливу роботу...
[Error] Ой! Виникла якась проблема.
-}
Цей простий приклад демонструє, як ви можете розміщувати декларації логування в вашому коді, щоб отримати уявлення про те, що відбувається під час роботи програми. logInfoN
і logErrorN
використовуються для логування інформаційних та повідомлень про помилки відповідно.
Поглиблюємо:
Логування пройшло довгий шлях від простих операторів друку до складних логувальних фреймворків. Історично, логи були просто текстовими виводами на консоль або у файл, а тепер вони включають структуровані дані, які можуть бути розібрані та проаналізовані різними інструментами.
В Haskell логування може виконуватися у чистому функціональному стилі, що включає явну передачу дій логування, або використання монадичних контекстів для нечистот, де логери неявно проходять через обчислення.
Бібліотека hslogger
, наприклад, є більш традиційною та змінною порівняно з monad-logger
. monad-logger
пропонує інтеграцію з монадичним стеком та забезпечує більше гнучкості в плані форматування виводу та контролю. Обидві бібліотеки дозволяють вам встановлювати рівні журналювання, які допомагають фільтрувати повідомлення журналу залежно від їх важливості. Рівні журналювання включають debug, info, notice, warning, error, critical, alert і emergency.
Підхід Haskell до логування часто відповідає його акценту на типовій безпеці та чистоті. Логи можуть оброблятися таким чином, що навіть якщо логування зазнає невдачі, воно не спричинить збою основного додатка завдяки потужним можливостям обробки помилок в Haskell.