библиотека, смешивающая log4Esp и Syslog для esp8266
Кто-то наконец создал новую библиотеку, объединяющую log4esp и syslog? см.: SyslogAppender для log4esp спасибо:!
@cly, 👍0
1 ответ
Лучший ответ:
▲ 0
Я проделал довольно грязную (но эффективную для моей цели) работу: создавая новый регистратор, я объявил и прикрепил к нему форматтер log4esp, в который отправил файлы . .. сообщения системного журнала
грязно, грязно, грязно
мои константы конфигурации: SYSLOG_SERVER, SYSLOG_PORT, DEVICE_HOSTNAME, APP_NAME
Мой logger.h
:
#ifndef Logging_H
#define Logging_H
#include <Log4Esp.h>
namespace Logging
{
void setup() ;
log4Esp::Logger Logger(const char *name);
}
#endif
мой logger.cpp
:
#include <Log4Esp.h>
#include <Syslog.h>
#include <WiFiUdp.h>
#include <ESP8266WiFi.h>
#include "Logger.h"
#include "config.h"
namespace Logging
{
// Экземпляр UDP, позволяющий отправлять и получать пакеты по UDP
WiFiUDP udpClient;
// Создаем новый экземпляр системного журнала с помощью функции LOG_KERN
Syslog syslog(udpClient, SYSLOG_SERVER, SYSLOG_PORT, DEVICE_HOSTNAME, APP_NAME, LOG_KERN);
//новый регистратор
log4Esp::Logger Logger(const char *name)
{
//новый экземпляр
log4Esp::Logger logger = log4Esp::Logger(name);
//минимальный уровень
logger.addLevelToAll(log4Esp::Appender::LOG_LEVEL);
// форматирование для последовательного протоколирования
logger.addFormatterToAll([name](Print & output, log4Esp::Appender::Level level, const char *msg, va_list * args) {
/////////////////////////////////////////////////////////////////////////////////
// формат последовательного журнала
// выводим время работы этой программы в миллисекундах
output.printf("%10d", millis());
output.print(log4Esp::Appender::DEFAULT_SEPARATOR);
// выводим свободное место в куче
output.printf("(%d)", ESP.getFreeHeap());
output.print(log4Esp::Appender::DEFAULT_SEPARATOR);
// имя логгера вывода
output.printf("%-4s", name);
output.print(log4Esp::Appender::DEFAULT_SEPARATOR);
// уровень вывода журнала
output.print(log4Esp::Appender::toString(level, true));
if (level <= log4Esp::Appender::Level::ERROR) {
output.print("***");
} else {
output.print(" ");
}
output.print(log4Esp::Appender::DEFAULT_SEPARATOR);
// определяем длину буфера для форматированных данных
size_t length = vsnprintf(NULL, 0, msg, *args) + 1;
char buffer[length];
// выводим отформатированные данные
vsnprintf(buffer, length, msg, *args);
output.print(buffer);
/////////////////////////////////////////////////////////////////////////////////
// Остановимся здесь, если Wi-Fi не работает
if (WiFi.status() != WL_CONNECTED)
return;
/////////////////////////////////////////////////////////////////////////////////
// формат системного журнала
uint16_t slevel;
switch (level) {
case log4Esp::Appender::Level::FATAL :
slevel = LOG_CRIT;
break;
case log4Esp::Appender::Level::ERROR :
slevel = LOG_ERR;
break;
case log4Esp::Appender::Level::WARNING :
slevel = LOG_WARNING;
break;
case log4Esp::Appender::Level::VERBOSE :
slevel = LOG_INFO;
break;
case log4Esp::Appender::Level::TRACE :
default:
slevel = LOG_DEBUG;
break;
}
syslog.logf(slevel, "%10d|(%d)|%-4s|%s", millis(), ESP.getFreeHeap(), name, buffer);
});
return logger;
}
void setup() {
}
}
,
@Cerber
Смотрите также:
- Как читать и записывать EEPROM в ESP8266
- Как сделать выводы Tx и Rx на ESP-8266-01 в выводах GPIO?
- Как навсегда изменить скорость передачи данных ESP8266 (12e)?
- Как заставить 5-вольтовое реле работать с NodeMCU
- Как исправить: Invalid conversion from 'const char*' to 'char*' [-fpermissive]
- ESP8266 не подключается к Wi-Fi
- AT-команда не отвечает на последовательный монитор
- Разница между этими двумя платами NodeMCU?
Да :) я понял теперь другая ветка! Для меня это тоже идеально, вам следует использовать GitHub :), @cly