Elm:
Lokitus
Kuinka:
Elmin arkkitehtuuri ei tue sivuvaikutuksia kuten lokitusta valmiina - käsittelet niitä komentojen kautta, jotka ovat osa sovelluksesi arkkitehtuuria. Koulutustarkoituksessa, katsotaan miten voisit simuloida lokitusta lähettämällä viestejä JavaScriptiin porttien kautta.
Aluksi määrittelet porttimoduulin:
port module Logger exposing (..)
-- Määrittele portti, joka lähettää lokitietoja JavaScriptiin
port log : String -> Cmd msg
Main.elm
-tiedostossasi käyttäisit log
-porttia lähettääksesi lokiviestin:
import Logger exposing (log)
update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
case msg of
AnEvent ->
-- joitakin päivityksiä malliisi täällä
( updatedModel, log "AnEvent tapahtui." )
AnotherEvent ->
-- muita mallipäivityksiä täällä
( anotherUpdatedModel, log "AnotherEvent tapahtui." )
JavaScript-puolella tilaisit log
-portin vastaanottamaan saapuvat lokiviestit:
var app = Elm.Main.init({ /* ... */ });
app.ports.log.subscribe(function(message) {
console.log(message);
});
Esimerkkilokituloste JavaScript-konsolissa olisi sitten:
AnEvent tapahtui.
AnotherEvent tapahtui.
Syväsukellus
Perinteisesti, kielissä kuten Python tai Java, lokitusta tehdään käyttämällä lokitus-kirjastoa, joka tarjoaa suoraviivaisen API:n viestien lokittamiseen eri tasolla kuten debug, info, varoitus, virhe ja kriittinen.
Elm, keskittyessään puhtauteen ja muuttumattomuuteen, ei tarjoa tätäntyyppistä suoraa lokitusta, sillä kaikki IO-toiminnot tai sivuvaikutukset hallitaan erikseen Elmin arkkitehtuurin kautta.
Kun tarvitset täysin varusteltua lokitusta Elm:ssä, luotat tyypillisesti ulkoisiin JavaScript-työkaluihin. Portit, kuten yllä näytettiin, ovat silta näihin työkaluihin. Debug-moduuli on toinen vaihtoehto, mutta se on tarkoitettu vain kehityskäyttöön, ei tuotantolokien keräämiseen.
Porttien lisäksi ohjelmoijat käyttävät usein Elmin kääntäjäviestejä ja ajonaikaisia vianetsintämahdollisuuksia, kuten Debug.log
, jonka voit lisätä koodiisi arvojen jäljittämiseksi. Se käärii ilmaisun ja lokittaa sen tulosteen konsoliin näin:
view model =
Debug.log "Mallin Debug" model
-- koodisi näkymälle täällä
Tämäkään ei kuitenkaan ole tarkoitettu tuotantokäyttöön. Työkalut, kuten elm-logger, tarjoavat jonkin verran abstraktioita porteille lokittamisen osalta, vaikkakin nämä ovat myös enemmän tarkoitettu kehityskäyttöön kuin tuotantoon.
Katso Myös
- Elm portit: https://guide.elm-lang.org/interop/ports.html
- Elm
Debug
: https://package.elm-lang.org/packages/elm/core/latest/Debug - Elm keskustelu lokituksesta: https://discourse.elm-lang.org/t/elm-and-logging/546
- JavaScript Console API: https://developer.mozilla.org/en-US/docs/Web/API/Console
- elm-logger paketti: https://package.elm-lang.org/packages/arkgil/elm-logger/latest/