Новая библиотека FmtLog — форматированный лог для Arduino

Привет, форумчане!

Выпустил библиотеку FmtLog — это простой инструмент для удобного вывода отладочных сообщений в Serial.

Зачем это нужно: вместо россыпи Serial.print и ручных пробелов/переводов строк — один вызов с форматированием в стиле Fmt, и без тяжёлого sprintf.

Основные возможности:

  • Форматированный вывод: уровни (INFO, DEBUG, ERROR и т.д.), метки времени, идентификаторы модулей.
  • Компактность и предсказуемый размер: не тянет лишние зависимости, подходит для AVR (Uno, Nano) и 32‑битных плат.
  • Переключаемые уровни логирования на этапе компиляции (через дефайны) — чтобы не засорять Serial в релизе.
  • Встроенный вывод в цвете (опция).
  • Простая интеграция: один заголовочный файл, минимум кода.

Пример использования:

cpp

ПереноситьСвернутьКопировать

#include <FmtLog.h>
using namespace fmtlog;

char line[64];
Fmt out(line, sizeof(line));
out.format(F("напряжение {} В, ток {} А"), 3.28, 0.42);
Serial.println(line);
// Вывод: [12s:104ms] I app: напряжение 3.28 В, ток 0.42 А

Где взять: github.comGitHub - 240974a/FmtLog: Форматирование строк по образцу {} и лёгкий журнал для микроконтроллеров. · GitHub

Буду благодарен за тесты на разных платах (особенно на AVR с малым объёмом RAM) и отзывы: что удобно, чего не хватает. Если найдёте баги — кидайте issue или сюда в тему.

Спасибо!

Достатошно перенаправить стандартный stdout в Serial, и удобное логгирование получается прям искаропки.

Так вроде у serial есть printf. Или есть иновации и алалоговнет?

если вы пожурить хотели, то хоть бы до dtostrf до float докопались бы…

Может быть merge request?, был бы признателен.

Установка

Arduino IDE — Library Manager, найти «FmtLog».

А не слишком ли самонадеянно? Откуда ардуиновскому менеджеру библиотек знать о какой-то «FmtLog»?

Собственно, он и не знает ))

Спасибо большущее! поправил.

Процесс логирования это не просто сделать красивый вывод, но и функциональный. Если вы уж делаете продукт, то для начала сделайте хотя бы метод выдачи логов. Они могут писаться в системный лог, либо в альтернативный. Сделайте возможность выдачи лога в сеть - почитайте документацию по логированию в системах. А фишкой была бы функция выдачи логов через WEB. Подключился и смотришь. А если еще и при этом с буферизацией, как dmesg, то тогда есть смысл применять практически везде.

Diskless, спасибо.

  1. В библиотеке чётко обозначены целевые платформы: ESP, AVR, в них нет системного лога.
  2. Sink поддерживаются в базе, src/Log.h#36. Пишете свой Sink, добавляете через addSink и библиотека автоматом выведет хоть в сеть, хоть на диск, хоть в любой порт или всё сразу.
  3. У себя я использую Sink для telnet, но это уже история для другой библиотеки, и только для ESP, выложу её попозже. Sink для HTTP тоже реализую.

Snmp trap поддерживается?

Кстати, отличная мысль! Туда же (другую в либу) запилю snmp (для начала упрощённые, только алармы), и аудит на Prometheus через Tempo/Loki.

И в нагиосы, и в заббиксы. Snmp был в ядре 8266. Я делал датчики для цисок без датчика температуры.

если что, я не шучу, всё что указал - сделаю.

Спасибо за замечание.
Выпустил новый релиз с печатью дробных своим кодом вместо dtostrf.

Теперь FmtLog доступен в каталоге Arduino.

Diskless, спасибо за идеи. Всё реализовал: релиз 1.3.0 - предложенные вами SNMP traps, вывод лога в SSE с просмотром журнала в Web броузере, по мне так - прикольно получилось, переключаешься мгновенно между платами, смотришь логи, в Grafana Loki - тоже.