Logi#

Logowanie z Lua#

Moduł Logger (z LoggerGo.lua) udostępnia singleton z czterema poziomami logów:

local log = Logger:getShared()

log:debug("Szczegółowa informacja debug")
log:info("Normalny komunikat")
log:warn("Ostrzeżenie")
log:error("Błąd!")

CLU Logger#

Dedykowany kanał dla logów CLU:

log:cluLogger("Wiadomość specyficzna dla CLU")

Automatyczna konwersja#

Logger automatycznie konwertuje argumenty do stringa:

log:info(42)              -- "42"
log:info({a=1, b=2})      -- "{a=1, b=2}" (via toString)
log:info(nil)             -- "nil"

Logowanie z Go#

Strona Go używa standardowego log.Printf z prefiksami:

PrefixŹródło
[LUA]Inicjalizacja silnika Lua
[TIMER]Eventy timerów
[HTTP]Requesty HTTP
[MQTT]Eventy MQTT
[GPIO]Operacje GPIO
[HTTP-SERVER]Wbudowany serwer HTTP

Przykłady:

[LUA] loading runtime from: /opt/vclu/runtime
[LUA] runtime loaded
[TIMER] Error executing timer callback: attempt to index a nil value
[GPIO] Pin 17 changed: false -> true

Bridge Lua → Go#

Logger Lua deleguje do Go przez javascriptBridge (nazwa historyczna):

function Logger:debug(message)
    if self.javascriptBridge ~= nil then
        self.javascriptBridge:log('debug', self:toString(message))
    else
        print("debug: " .. self:toString(message))
    end
end

Gdy bridge nie jest dostępny (np. w testach), logi idą na print().

Logi błędów EventBus#

Błędy w callbackach EventBus są automatycznie logowane:

-- Gdy callback rzuci błąd:
-- Logger: "EventBus callback error: attempt to call nil value"

Callback z błędem nie przerywa wykonania pozostałych callbacków tego samego eventu.

Logi timerów (Go)#

[TIMER] Error executing timer callback: <error message>

Błędy w callback timerów są logowane, ale timer (jeśli interval) kontynuuje działanie.

Podgląd logów#

Logi idą na stdout procesu Go. W zależności od środowiska:

# Systemd
journalctl -u vclu -f

# Docker
docker logs -f vclu

# Bezpośrednio
./vclu 2>&1 | tee vclu.log