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 msgMain.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/