has someone finaly made a new lib combining log4esp and syslog cf : SyslogAppender for log4esp thanks:!
Asked
Active
Viewed 458 times
1 Answers
0
I did a rather dirty (but efficient for my purpose) job : While creating a new logger I declared and attached to it a log4esp formatter in which I sent ... syslog messages
dirty dirty dirty
my config constants are : SYSLOG_SERVER, SYSLOG_PORT, DEVICE_HOSTNAME, APP_NAME
My logger.h:
#ifndef Logging_H
#define Logging_H
#include <Log4Esp.h>
namespace Logging
{
void setup() ;
log4Esp::Logger Logger(const char *name);
}
#endif
my logger.cpp:
#include <Log4Esp.h>
#include <Syslog.h>
#include <WiFiUdp.h>
#include <ESP8266WiFi.h>
#include "Logger.h"
#include "config.h"
namespace Logging
{
// A UDP instance to let us send and receive packets over UDP
WiFiUDP udpClient;
// Create a new syslog instance with LOG_KERN facility
Syslog syslog(udpClient, SYSLOG_SERVER, SYSLOG_PORT, DEVICE_HOSTNAME, APP_NAME, LOG_KERN);
//new logger
log4Esp::Logger Logger(const char *name)
{
//new instance
log4Esp::Logger logger = log4Esp::Logger(name);
//minimal level
logger.addLevelToAll(log4Esp::Appender::LOG_LEVEL);
// formatting for serial logging
logger.addFormatterToAll([name](Print & output, log4Esp::Appender::Level level, const char *msg, va_list * args) {
////////////////////////////////////////
// serial log format
// output uptime of this program in milliseconds
output.printf("%10d", millis());
output.print(log4Esp::Appender::DEFAULT_SEPARATOR);
// output free heap space
output.printf("(%d)", ESP.getFreeHeap());
output.print(log4Esp::Appender::DEFAULT_SEPARATOR);
// output logger name
output.printf("%-4s", name);
output.print(log4Esp::Appender::DEFAULT_SEPARATOR);
// output log level
output.print(log4Esp::Appender::toString(level, true));
if (level <= log4Esp::Appender::Level::ERROR) {
output.print("***");
} else {
output.print(" ");
}
output.print(log4Esp::Appender::DEFAULT_SEPARATOR);
// determine buffer length for formatted data
size_t length = vsnprintf(NULL, 0, msg, *args) + 1;
char buffer[length];
// output formatted data
vsnprintf(buffer, length, msg, *args);
output.print(buffer);
////////////////////////////////////////
// Stop here if wifi is down
if (WiFi.status() != WL_CONNECTED)
return;
////////////////////////////////////////
// format for syslog
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
- 128
- 4