diff --git a/src/Syslog.cpp b/src/Syslog.cpp index 78e4fcb..f987b3b 100644 --- a/src/Syslog.cpp +++ b/src/Syslog.cpp @@ -14,6 +14,7 @@ Syslog::Syslog(UDP &client, uint8_t protocol) { this->_deviceHostname = SYSLOG_NILVALUE; this->_appName = SYSLOG_NILVALUE; this->_priDefault = LOG_KERN; + this->_serialPrint = false; } Syslog::Syslog(UDP &client, const char* server, uint16_t port, const char* deviceHostname, const char* appName, uint16_t priDefault, uint8_t protocol) { @@ -24,6 +25,7 @@ Syslog::Syslog(UDP &client, const char* server, uint16_t port, const char* devic this->_deviceHostname = (deviceHostname == NULL) ? SYSLOG_NILVALUE : deviceHostname; this->_appName = (appName == NULL) ? SYSLOG_NILVALUE : appName; this->_priDefault = priDefault; + this->_serialPrint = false; } Syslog::Syslog(UDP &client, IPAddress ip, uint16_t port, const char* deviceHostname, const char* appName, uint16_t priDefault, uint8_t protocol) { @@ -34,6 +36,7 @@ Syslog::Syslog(UDP &client, IPAddress ip, uint16_t port, const char* deviceHostn this->_deviceHostname = (deviceHostname == NULL) ? SYSLOG_NILVALUE : deviceHostname; this->_appName = (appName == NULL) ? SYSLOG_NILVALUE : appName; this->_priDefault = priDefault; + this->_serialPrint = false; } Syslog &Syslog::server(const char* server, uint16_t port) { @@ -183,14 +186,24 @@ bool Syslog::log(const char *message) { return this->_sendLog(this->_priDefault, message); } +void Syslog::setSerialPrint(bool serialPrint) { + this->_serialPrint = serialPrint; +} + // Private Methods ///////////////////////////////////////////////////////////// inline bool Syslog::_sendLog(uint16_t pri, const char *message) { - int result; - + int result; + + if (this->_serialPrint) + { + Serial.printf("%s: %s\r\n", this->_getPriorityString(pri).c_str(), message); + } + if ((this->_server == NULL && this->_ip == INADDR_NONE) || this->_port == 0) - return false; - + { + return false; + } // Check priority against priMask values. if ((LOG_MASK(LOG_PRI(pri)) & this->_priMask) == 0) return true; @@ -198,13 +211,11 @@ inline bool Syslog::_sendLog(uint16_t pri, const char *message) { // Set default facility if none specified. if ((pri & LOG_FACMASK) == 0) pri = LOG_MAKEPRI(LOG_FAC(this->_priDefault), pri); - if (this->_server != NULL) { result = this->_client->beginPacket(this->_server, this->_port); } else { result = this->_client->beginPacket(this->_ip, this->_port); } - if (result != 1) return false; @@ -234,6 +245,11 @@ inline bool Syslog::_sendLog(uint16_t pri, const char *message) { inline bool Syslog::_sendLog(uint16_t pri, const __FlashStringHelper *message) { int result; + if (this->_serialPrint) + { + Serial.printf("%s: %s\r\n", this->_getPriorityString(pri).c_str(), message); + } + if ((this->_server == NULL && this->_ip == INADDR_NONE) || this->_port == 0) return false; @@ -277,3 +293,48 @@ inline bool Syslog::_sendLog(uint16_t pri, const __FlashStringHelper *message) { return true; } + +String Syslog::_getPriorityString(uint16_t pri) { + String priorityName; + + switch (pri) + { + case LOG_EMERG: + priorityName = "EMERGENCY"; + break; + + case LOG_ALERT: + priorityName = "ALERT"; + break; + + case LOG_CRIT: + priorityName = "CRITICAL"; + break; + + case LOG_ERR: + priorityName = "ERROR"; + break; + + case LOG_WARNING: + priorityName = "WARNING"; + break; + + case LOG_NOTICE: + priorityName = "NOTICE"; + break; + + case LOG_INFO: + priorityName = "INFO"; + break; + + case LOG_DEBUG: + priorityName = "DEBUG"; + break; + + default: + priorityName = "UNKNOWN"; + break; + } + + return priorityName; +} \ No newline at end of file diff --git a/src/Syslog.h b/src/Syslog.h index 5dc7619..cda9ba6 100644 --- a/src/Syslog.h +++ b/src/Syslog.h @@ -91,10 +91,13 @@ class Syslog { const char* _appName; uint16_t _priDefault; uint8_t _priMask = 0xff; + bool _serialPrint; bool _sendLog(uint16_t pri, const char *message); bool _sendLog(uint16_t pri, const __FlashStringHelper *message); + String _getPriorityString(uint16_t pri); + public: Syslog(UDP &client, uint8_t protocol = SYSLOG_PROTO_IETF); Syslog(UDP &client, const char* server, uint16_t port, const char* deviceHostname = SYSLOG_NILVALUE, const char* appName = SYSLOG_NILVALUE, uint16_t priDefault = LOG_KERN, uint8_t protocol = SYSLOG_PROTO_IETF); @@ -105,6 +108,7 @@ class Syslog { Syslog &deviceHostname(const char* deviceHostname); Syslog &appName(const char* appName); Syslog &defaultPriority(uint16_t pri = LOG_KERN); + Syslog &logMask(uint8_t priMask); @@ -124,6 +128,8 @@ class Syslog { bool log(const __FlashStringHelper *message); bool log(const String &message); bool log(const char *message); + + void setSerialPrint(bool serialPrint); }; #endif