Elm:
Registro de Logs

Como fazer:

A arquitetura do Elm não suporta efeitos colaterais como o registro imediatamente - você os gerencia por meio de comandos, que são uma parte da arquitetura da sua aplicação. Para fins educativos, vamos ver como você poderia simular o registro enviando mensagens para o JavaScript através de portas.

Primeiro, você vai definir um módulo de porta:

port module Logger exposing (..)

-- Definir uma porta para enviar registros para o JavaScript
port log : String -> Cmd msg

No seu Main.elm, você usaria a porta log para enviar uma mensagem de registro:

import Logger exposing (log)

update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
    case msg of
        AnEvent ->
            -- algumas atualizações no seu modelo aqui
            ( updatedModel, log "Ocorreu um AnEvent." )

        AnotherEvent ->
            -- outras atualizações de modelo aqui
            ( anotherUpdatedModel, log "Ocorreu um AnotherEvent." )

No lado do JavaScript, você assinaria a porta log para gerenciar as mensagens de registro que chegam:

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

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

A saída de amostra no console do JavaScript seria então:

Ocorreu um AnEvent.
Ocorreu um AnotherEvent.

Mergulho Profundo

Tradicionalmente, em linguagens como Python ou Java, o registro é feito usando uma biblioteca de registro, que fornece uma API direta para registrar mensagens em vários níveis, como debug, info, warning, error e critical.

O Elm, com seu foco em pureza e imutabilidade, não fornece esse tipo de registro direto, pois qualquer tipo de IO ou efeito colateral é gerenciado de forma distinta através da arquitetura do Elm.

Quando você precisa de um registro completo no Elm, normalmente depende de ferramentas externas de JavaScript. As portas, como mostrado acima, são a ponte para essas ferramentas. O módulo Debug é outra opção, mas é destinado apenas para uso durante o desenvolvimento, e não para registro em produção.

Além de portas, os programadores muitas vezes fazem uso das mensagens do compilador do Elm e das facilidades de depuração em tempo de execução, como Debug.log, que você pode inserir no seu código para rastrear valores. Ele envolve uma expressão e registra sua saída no console assim:

view model =
    Debug.log "Debug do Modelo" model
    -- seu código de visualização aqui

No entanto, isso também não é destinado para produção. Ferramentas como elm-logger fornecem algumas abstrações sobre portas para registro, embora estas também sejam destinadas mais para desenvolvimento do que para produção.

Veja Também