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 -> trueBridge 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
endGdy 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