Compare commits
No commits in common. "master" and "release01" have entirely different histories.
@ -1,29 +1,36 @@
|
|||||||
/**
|
|
||||||
* @file MainExample.cpp
|
|
||||||
* @brief example using logger
|
|
||||||
* @author hendrik schutter
|
|
||||||
* @date 04.09.2020
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "logger.h"
|
#include "logger.h"
|
||||||
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief application entry point
|
// g++ -Wall -o myTest myTest.cpp libftpclient.a -lcurl
|
||||||
* \param void
|
|
||||||
* \return int
|
|
||||||
*/
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
cout << "Hello World!\n";
|
cout << "Hello World!\n";
|
||||||
|
|
||||||
Logger::logThis()->info("Alle Systeme laufen!"); //demo
|
//CFTPClient* ftp = new CFTPClient(PRINT_LOG);
|
||||||
usleep(1465);
|
|
||||||
Logger::logThis()->warning("Alle Systeme laufen!"); //demo
|
struct sID id;
|
||||||
usleep(51654);
|
|
||||||
Logger::logThis()->error("Alle Systeme laufen!"); //demo
|
id.description = "CCTV_Radar © CopterSicht 2018";
|
||||||
|
id.deviceID = "Camera04";
|
||||||
|
id.softwareID = "0.1.1.8";
|
||||||
|
id.hardwareID = "7.77.9";
|
||||||
|
|
||||||
|
Logger* logging = new Logger("./test.txt", id);
|
||||||
|
|
||||||
|
logging->info("Alle Systeme laufen!");
|
||||||
|
logging->warning("Alle Systeme laufen!");
|
||||||
|
logging->error("Alle Systeme laufen!");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
cout << "bye!\n";
|
cout << "bye!\n";
|
||||||
|
|
||||||
|
@ -1,5 +1,2 @@
|
|||||||
# cppSimpleLogger
|
# cppSimpleLogger
|
||||||
|
|
||||||
## build example
|
|
||||||
|
|
||||||
rm -f test.txt && clear && g++ -Wall logger.cpp MainExample.cpp -o myTest && ./myTest
|
|
||||||
|
242
logger.cpp
242
logger.cpp
@ -1,233 +1,125 @@
|
|||||||
/**
|
|
||||||
* @file logger.cpp
|
|
||||||
* @brief cppSimpleLogger implementation
|
|
||||||
* @author hendrik schutter
|
|
||||||
* @date 04.09.2020
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "logger.h"
|
#include "logger.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
string version = "0.2.1"; //logger version
|
string version = "0.1";
|
||||||
|
|
||||||
bool Logger::instanceFlag = false;
|
Logger::Logger(string pLogPath,struct sID id) {
|
||||||
Logger* Logger::single = NULL;
|
this->logPath =pLogPath;
|
||||||
|
|
||||||
/**
|
writeLog("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
|
||||||
* \brief create new logger instance
|
writeLog("+ +");
|
||||||
* \param path to log file
|
writeLog("+ Device: " + id.deviceID + " -- " + id.description + " +");
|
||||||
* \param struct with data
|
writeLog("+ +");
|
||||||
* \return instance of Logger
|
writeLog("+ Software ID: " + id.softwareID + " -- Build time: " + __DATE__ + " " + __TIME__ + " +");
|
||||||
*/
|
writeLog("+ +");
|
||||||
Logger::Logger()
|
writeLog("+ Hardware ID: " + id.hardwareID + " -- MAC: " + getMacAddress() + " +");
|
||||||
{
|
writeLog("+ +");
|
||||||
this->logPath = LOG_PATH;
|
writeLog("+ cppSimpleLogger -- available from https://git.mosad.xyz/localhorst/cppSimpleLogger -- Version: " + version + " +");
|
||||||
|
writeLog("+ +");
|
||||||
writeLog(menuLine('+', MENU_LINE_SIZE));
|
writeLog("+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
|
||||||
writeLog(padStringMenu('+', " ", MENU_LINE_SIZE));
|
|
||||||
|
|
||||||
writeLog(padStringMenu('+', ("Device: " + string(DEVICE_ID) + " -- " + string(DESCRIPTION)), MENU_LINE_SIZE));
|
|
||||||
writeLog(padStringMenu('+', " ", MENU_LINE_SIZE));
|
|
||||||
|
|
||||||
writeLog(padStringMenu('+', ("Software ID: " + string(SOFTWARE_VERSION) + " -- Build time: " + __DATE__ + " " + __TIME__), MENU_LINE_SIZE));
|
|
||||||
writeLog(padStringMenu('+', " ", MENU_LINE_SIZE));
|
|
||||||
|
|
||||||
writeLog(padStringMenu('+', ("Hardware ID: " + string(HARDWARE_VERSION) + " -- MAC: " + getMacAddress()), MENU_LINE_SIZE));
|
|
||||||
writeLog(padStringMenu('+', " ", MENU_LINE_SIZE));
|
|
||||||
|
|
||||||
writeLog(padStringMenu('+', ("cppSimpleLogger -- available from https://git.mosad.xyz/localhorst/cppSimpleLogger -- Version: " + version), MENU_LINE_SIZE));
|
|
||||||
writeLog(padStringMenu('+', " ", MENU_LINE_SIZE));
|
|
||||||
|
|
||||||
writeLog(menuLine('+', MENU_LINE_SIZE));
|
|
||||||
newLine();
|
newLine();
|
||||||
info("Created new log file");
|
info("Created new log file");
|
||||||
newLine();
|
newLine();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief deconstructor
|
Logger::~Logger() {
|
||||||
* \return void
|
|
||||||
*/
|
|
||||||
Logger::~Logger()
|
|
||||||
{
|
|
||||||
instanceFlag = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief log info
|
void Logger::info(string s) {
|
||||||
* \param log-text as string
|
|
||||||
* \return void
|
|
||||||
*/
|
|
||||||
void Logger::info(string s)
|
|
||||||
{
|
|
||||||
string tmp = getTimestamp() + " [INFO] " + s;
|
string tmp = getTimestamp() + " [INFO] " + s;
|
||||||
writeLog(tmp);
|
writeLog(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
void Logger::warning(string s) {
|
||||||
* \brief log warning
|
|
||||||
* \param log-text as string
|
|
||||||
* \return void
|
|
||||||
*/
|
|
||||||
void Logger::warning(string s)
|
|
||||||
{
|
|
||||||
string tmp = getTimestamp() + " [WARNING] " + s;
|
string tmp = getTimestamp() + " [WARNING] " + s;
|
||||||
writeLog(tmp);
|
writeLog(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
void Logger::error(string s) {
|
||||||
* \brief log error
|
|
||||||
* \param log-text as string
|
|
||||||
* \return void
|
|
||||||
*/
|
|
||||||
void Logger::error(string s)
|
|
||||||
{
|
|
||||||
string tmp = getTimestamp() + " [ERROR] " + s;
|
string tmp = getTimestamp() + " [ERROR] " + s;
|
||||||
writeLog(tmp);
|
writeLog(tmp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief write to log file
|
void Logger::writeLog(string s) {
|
||||||
* \param log as string
|
|
||||||
* \return void
|
|
||||||
*/
|
|
||||||
void Logger::writeLog(string s)
|
|
||||||
{
|
|
||||||
ofstream logFile;
|
ofstream logFile;
|
||||||
Logger::mtxLog.lock(); //lock this section for other threads
|
|
||||||
logFile.open(this->logPath, ios_base::app);
|
logFile.open(this->logPath, ios_base::app);
|
||||||
|
|
||||||
logFile << (s + "\n"); //append to existing file
|
logFile << (s + "\n");
|
||||||
|
|
||||||
logFile.close();
|
logFile.close();
|
||||||
Logger::mtxLog.unlock(); //unlock this section for other threads
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
void Logger::newLine() {
|
||||||
* \brief write new line to log file
|
|
||||||
* \return void
|
|
||||||
*/
|
|
||||||
void Logger::newLine()
|
|
||||||
{
|
|
||||||
writeLog(" ");
|
writeLog(" ");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief get timestamp (system time) as string
|
string Logger::getTimestamp() {
|
||||||
* \param void
|
time_t rawtime;
|
||||||
* \return string timestamp (formatted)
|
|
||||||
*/
|
|
||||||
string Logger::getTimestamp()
|
|
||||||
{
|
|
||||||
struct tm * timeinfo;
|
struct tm * timeinfo;
|
||||||
struct timeval tv;
|
char buffer [80];
|
||||||
int millisec;
|
time (&rawtime);
|
||||||
char cpDate [80];
|
timeinfo = localtime (&rawtime);
|
||||||
char buffer [120];
|
strftime (buffer,80,"%d/%m/%Y %T",timeinfo);
|
||||||
|
|
||||||
gettimeofday(&tv, NULL);
|
|
||||||
millisec = lrint(tv.tv_usec/1000.0); // Round to nearest millisec
|
|
||||||
if (millisec>=1000) // Allow for rounding up to nearest second
|
|
||||||
{
|
|
||||||
millisec -=1000;
|
|
||||||
tv.tv_sec++;
|
|
||||||
}
|
|
||||||
timeinfo = localtime(&tv.tv_sec);
|
|
||||||
strftime (cpDate,80,"%d/%m/%Y %T",timeinfo);
|
|
||||||
sprintf(buffer, "%s.%03d", cpDate, millisec);
|
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief get MAC address (system first eth0 interface) as string
|
|
||||||
* \param void
|
|
||||||
* \return string MAC address (formatted)
|
|
||||||
*/
|
|
||||||
string Logger::getMacAddress()
|
string Logger::getMacAddress()
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct ifreq ifr;
|
struct ifreq ifr;
|
||||||
int s = socket(AF_INET, SOCK_STREAM,0);
|
int s;
|
||||||
|
if ((s = socket(AF_INET, SOCK_STREAM,0)) < 0) {
|
||||||
|
//perror("socket");
|
||||||
|
//return -1;
|
||||||
|
}
|
||||||
|
|
||||||
strcpy(ifr.ifr_name, "eth0");
|
strcpy(ifr.ifr_name, "eth0");
|
||||||
if (ioctl(s, SIOCGIFHWADDR, &ifr) < 0)
|
if (ioctl(s, SIOCGIFHWADDR, &ifr) < 0) {
|
||||||
{
|
//perror("ioctl");
|
||||||
strcpy(ifr.ifr_name, "eno1");
|
|
||||||
|
|
||||||
|
strcpy(ifr.ifr_name, "eno1");
|
||||||
|
if (ioctl(s, SIOCGIFHWADDR, &ifr) < 0) {
|
||||||
|
//perror("ioctl");
|
||||||
|
//return -1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned char *hwaddr = (unsigned char *)ifr.ifr_hwaddr.sa_data;
|
unsigned char *hwaddr = (unsigned char *)ifr.ifr_hwaddr.sa_data;
|
||||||
|
|
||||||
char buffer [80];
|
char buffer [80];
|
||||||
|
|
||||||
sprintf(buffer,"%02X:%02X:%02X:%02X:%02X:%02X", hwaddr[0], hwaddr[1], hwaddr[2],
|
sprintf(buffer,"%02X:%02X:%02X:%02X:%02X:%02X", hwaddr[0], hwaddr[1], hwaddr[2],
|
||||||
hwaddr[3], hwaddr[4], hwaddr[5]);
|
hwaddr[3], hwaddr[4], hwaddr[5]);
|
||||||
close(s);
|
close(s);
|
||||||
|
|
||||||
string tmp = buffer;
|
string tmp = buffer;
|
||||||
|
|
||||||
|
|
||||||
|
//cout << tmp << endl;
|
||||||
|
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief format menu text in center
|
|
||||||
* \param char for border
|
|
||||||
* \param menu text
|
|
||||||
* \param size of menu line
|
|
||||||
* \return string menu line
|
|
||||||
*/
|
|
||||||
string Logger::padStringMenu(char cBorder, string text, uint8_t u8LineLenght)
|
|
||||||
{
|
|
||||||
string result(1,cBorder);
|
|
||||||
uint8_t u8TextSize = text.length();
|
|
||||||
uint8_t u8Padding = ((u8LineLenght-u8TextSize)/2);
|
|
||||||
|
|
||||||
for(uint8_t i = 0 ; i < u8Padding; i++)
|
|
||||||
{
|
|
||||||
result.append(" ");
|
|
||||||
}
|
|
||||||
|
|
||||||
result.append(text);
|
|
||||||
|
|
||||||
while((uint8_t)result.length() < (u8LineLenght-1))
|
|
||||||
{
|
|
||||||
|
|
||||||
result.append(" ");
|
|
||||||
}
|
|
||||||
|
|
||||||
result.append(string(1, cBorder));
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief format a separator
|
|
||||||
* \param char for border
|
|
||||||
* \param size of menu line
|
|
||||||
* \return string menu line
|
|
||||||
*/
|
|
||||||
string Logger::menuLine(char cBorder, uint8_t u8LineLenght)
|
|
||||||
{
|
|
||||||
string result(1,cBorder);
|
|
||||||
|
|
||||||
while((uint8_t)result.length() < u8LineLenght)
|
|
||||||
{
|
|
||||||
result.append(string(1, cBorder));
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief return a instance of the logger
|
|
||||||
* \return logger obj
|
|
||||||
*/
|
|
||||||
Logger* Logger::logThis()
|
|
||||||
{
|
|
||||||
if (!instanceFlag)
|
|
||||||
{
|
|
||||||
single = new Logger(); //create new obj
|
|
||||||
instanceFlag = true;
|
|
||||||
return single;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return single; //return existing obj
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
64
logger.h
64
logger.h
@ -1,13 +1,3 @@
|
|||||||
/**
|
|
||||||
* @file logger.h
|
|
||||||
* @brief cppSimpleLogger Header
|
|
||||||
* @author hendrik schutter
|
|
||||||
* @date 04.09.2020
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef LOGGER_H_
|
|
||||||
#define LOGGER_H_
|
|
||||||
|
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
@ -22,59 +12,49 @@
|
|||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <net/if.h>
|
#include <net/if.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/time.h>
|
|
||||||
#include <math.h>
|
|
||||||
#include <mutex>
|
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
#define MENU_LINE_SIZE 110 //Size of menu lines
|
|
||||||
|
|
||||||
#ifndef LOG_PATH
|
|
||||||
#define LOG_PATH "./test.txt"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef DESCRIPTION
|
struct sID {
|
||||||
#define DESCRIPTION "Software-Name - Copyright Company 2020" //use your values here
|
string description;
|
||||||
#endif
|
string deviceID;
|
||||||
|
string softwareID;
|
||||||
|
string hardwareID;
|
||||||
|
} ;
|
||||||
|
|
||||||
#ifndef DEVICE_ID
|
|
||||||
#define DEVICE_ID "Device-Name" //use your values here
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef SOFTWARE_VERSION
|
class Logger {
|
||||||
#define SOFTWARE_VERSION "0.1.1.8" //use your values here
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef HARDWARE_VERSION
|
|
||||||
#define HARDWARE_VERSION "7.77.9" //use your values here
|
|
||||||
#endif
|
|
||||||
|
|
||||||
class Logger
|
|
||||||
{
|
|
||||||
private:
|
private:
|
||||||
string logPath;
|
|
||||||
mutex mtxLog;
|
|
||||||
|
|
||||||
static bool instanceFlag;
|
string logPath;
|
||||||
static Logger *single;
|
|
||||||
|
|
||||||
string getTimestamp();
|
string getTimestamp();
|
||||||
void writeLog(string s);
|
void writeLog(string s);
|
||||||
string getMacAddress();
|
string getMacAddress();
|
||||||
string padStringMenu(char cBorder, string text, uint8_t u8LineLenght);
|
|
||||||
string menuLine(char cBorder, uint8_t u8LineLenght);
|
|
||||||
Logger();
|
|
||||||
~Logger();
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
Logger(string pLogPath, struct sID id);
|
||||||
|
~Logger();
|
||||||
void info(string s);
|
void info(string s);
|
||||||
void warning(string s);
|
void warning(string s);
|
||||||
void error(string s);
|
void error(string s);
|
||||||
|
|
||||||
void newLine();
|
void newLine();
|
||||||
|
|
||||||
static Logger* logThis();
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // LOGGER_H_
|
|
||||||
|
17
test.txt
17
test.txt
@ -1,17 +0,0 @@
|
|||||||
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
+ +
|
|
||||||
+ Device: Device-Name -- Software-Name - Copyright Company 2020 +
|
|
||||||
+ +
|
|
||||||
+ Software ID: 0.1.1.8 -- Build time: Sep 7 2020 15:29:48 +
|
|
||||||
+ +
|
|
||||||
+ Hardware ID: 7.77.9 -- MAC: 9E:81:AE:7F:00:00 +
|
|
||||||
+ +
|
|
||||||
+ cppSimpleLogger -- available from https://git.mosad.xyz/localhorst/cppSimpleLogger -- Version: 0.2.1 +
|
|
||||||
+ +
|
|
||||||
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
|
|
||||||
07/09/2020 15:29:49.239 [INFO] Created new log file
|
|
||||||
|
|
||||||
07/09/2020 15:29:49.239 [INFO] Alle Systeme laufen!
|
|
||||||
07/09/2020 15:29:49.240 [WARNING] Alle Systeme laufen!
|
|
||||||
07/09/2020 15:29:49.292 [ERROR] Alle Systeme laufen!
|
|
Loading…
Reference in New Issue
Block a user