Elm:
Журналирование

Как это сделать:

Архитектура Elm изначально не поддерживает побочные эффекты, такие как логирование — вы управляете ими через команды, которые являются частью архитектуры вашего приложения. Для образовательных целей давайте посмотрим, как вы можете имитировать логирование, отправляя сообщения в JavaScript через порты.

Сначала вы определите модуль порта:

port module Logger exposing (..)

-- Определите порт для отправки логов в JavaScript
port log : String -> Cmd msg

В вашем Main.elm вы бы использовали порт log для отправки сообщения лога:

import Logger exposing (log)

update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
    case msg of
        AnEvent ->
            -- здесь некоторые обновления вашей модели
            ( updatedModel, log "Произошло событие AnEvent." )

        AnotherEvent ->
            -- здесь другие обновления модели
            ( anotherUpdatedModel, log "Произошло событие AnotherEvent." )

На стороне JavaScript вы бы подписались на порт log, чтобы обрабатывать входящие сообщения лога:

var app = Elm.Main.init({ /* ... */ });

app.ports.log.subscribe(function(message) {
    console.log(message);
});

Пример вывода в консоль JavaScript будет следующим:

Произошло событие AnEvent.
Произошло событие AnotherEvent.

Погружение

Традиционно, в языках, таких как Python или Java, логирование выполняется с использованием библиотеки логирования, которая предоставляет простой API для записи сообщений на различных уровнях, таких как debug, info, warning, error и critical.

Elm, с его акцентом на чистоте и неизменяемости, не предоставляет такой прямой возможности логирования, поскольку любой вид ввода-вывода или побочного эффекта управляется отдельно через архитектуру Elm.

Когда вам нужно полнофункциональное логирование в Elm, обычно вы полагаетесь на внешние инструменты JavaScript. Порты, как показано выше, являются мостом к этим инструментам. Модуль Debug - это еще один вариант, но он предназначен только для использования во время разработки, а не для логирования в производстве.

В дополнение к портам, программисты часто используют сообщения компилятора Elm и средства отладки времени выполнения, такие как Debug.log, которые вы можете вставить в свой код для отслеживания значений. Он оборачивает выражение и записывает его вывод в консоль следующим образом:

view model =
    Debug.log "Отладка модели" model
    -- здесь ваш код представления

Однако это тоже не предназначено для производства. Инструменты, такие как elm-logger, предоставляют некоторые абстракции над портами для логирования, хотя они также предназначены больше для разработки, чем для производства.

Смотрите также