This API provides a tool to generate logs, it's functionalies are:
- Cyclic files of log, which are configurable, to keep trackinf the information.
- Capability to wirte binary information an get the Hex and ASC represetnation.
- A queue to delegate the writing to logs and return the thread of execution asap.
- Visual Studio Code
- C++17.
- gcc (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0
- PlugIn C/C++ for Visual Studio Code
- GNU gdb (Ubuntu 9.2-0ubuntu1~20.04) 9.2
Build APILig Lib and Sample:
$ makeBuild only the APILog Lib:
$ make apilogBuild only the sample:
$ make sampleInstall the APILog:
$ sudo make installRun the sample:
$ make run$ ./bin/sampleUninstall the APILog:
$ sudo make uninstallClean all the compiled objects and binary files,log files from test as well:
$ make clean- Include the header file
APILogCpp.hwhich is allocated into the directoryincludeand the namespaceapilog:
#include <APILogCpp.h>
using namespace apilog;- Initi the log with its parameters:
bool initLog(string name, string path, int filesBackup, int fileSize, string format, string title);- name: Name of the logfile.
- path: The path where the log files will be created.
- filesBackup: The amount of files that will be create the backup cycle.
- fileSize: The size, in MemgaBytes, that each file can grow.
- format: The string format for the Date. It will follow the format of
strftime, but if you want to add milliseconds, you have to add at the end of the format the postfix '.@s'. - title: The title that each log file will have at the moment of its creation.
- Create As many
LogGatewhich will have a specific name to be added after the type of message:
LogGate log("MAIN_LOG");
``` cmd
2016-10-07 22:05:24.630 DEBUG MAIN_LOG Mensaje de un Buffer Cualqueira.- Set the debug level of the LogGate, in this way you can filter the log message by type:
log.setLogLevel(LOG_LEVEL::INFO | LOG_LEVEL::ERROR | LOG_LEVEL::WARNING | LOG_LEVEL::DEBUG_ON | LOG_LEVEL::DEBUG_LVL_2);The different levels available are:
enum LOG_LEVEL : unsigned int
{
LOG_DISABLE = 0x0000,
LOG_ALL = 0xFFFF,
INFO = 0x0001,
WARNING = 0x0002,
ERROR = 0x0004,
DEBUG_ON = 0x0018,
DEBUG_LVL_1 = 0x0010,
DEBUG_LVL_2 = 0x0020,
DEBUG_LVL_3 = 0x0040,
DEBUG_LVL_4 = 0x0080
};- Use the differentes methos to write a message log:
log.writeInfo("Este es un mensaje de INFO");
log.writeWarn("Este es un mensaje de Warning");
log.writeError("Este es un mensaje de ERROR");
log.writeDebug(LOG_LEVEL::DEBUG, "Este es un mensaje de DEBUG");
log.writeBytes(LOG_LEVEL::DEBUG, "Mensaje de un Buffer Cualqueira.",buffer, size);#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
#include <sstream>
#include <ostream>
#include <iomanip>
#include <mutex>
#include <ctime>
#include <exception>
#include <thread>
#include <chrono>
#include <APILogCpp.h>
using namespace std;
using namespace apilog;
int main()
{
stringstream header;
header << "--------------------------------------" << endl
<< "API LOG Test App." << endl
<< "This is a App header." << endl
<< "--------------------------------------";
LogManager::getLogManger()->initLog("TestLog", "./logs", 10, 1, "%Y-%m-%d %H:%M:%S.@s", header.str());
cout << "Generating logs in dir: .logs/\n";
LogGate log("MAIN_OBJ");
log.setLogLevel(LOG_LEVEL::INFO | LOG_LEVEL::ERROR | LOG_LEVEL::WARNING | LOG_LEVEL::DEBUG_ON | LOG_LEVEL::DEBUG_LVL_2);
LOG_LEVEL::DEBUG_LVL_2);
LogGate logSec("SECN_OBJ");
std::this_thread::sleep_for(std::chrono::duration<suseconds_t>(2));
char buffer[] = { 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19 ,
0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
0x70, 0x71, 0x72};
int size = 43;
for (int i = 0; i < 20000; i++)
{
stringstream counter;
counter << "--[" << i << "]-----------";
log.writeInfo(counter.str());
log.writeInfo("Este es un mensaje de INFO");
log.writeWarn("Este es un mensaje de Warning");
log.writeError("Este es un mensaje de ERROR");
log.writeDebug(LOG_LEVEL::DEBUG_LVL_1, "Este es un mensaje de DEBUG Lv1");
log.writeBytes(LOG_LEVEL::DEBUG_LVL_2, "Mensaje de un Buffer Cualqueira.",buffer, size);
logSec.writeInfo("Este es un mensaje de INFO (Si aparece)");
logSec.writeDebug(LOG_LEVEL::DEBUG_LVL_1, "Este es un mensaje de DEBUG Lv1");
logSec.writeDebug(LOG_LEVEL::DEBUG_LVL_3, "Este es un mensaje de DEBUG Lv3");
logSec.writeDebug(LOG_LEVEL::DEBUG_LVL_4, "Este es un mensaje de DEBUG Lv4");
if(i%1500 == 0)
std::this_thread::sleep_for(std::chrono::duration<suseconds_t>(1));
}
cout << "Test ended.\n";
log.writeInfo("Test ended");
logSec.writeInfo("log Secundario se termina.");
return 0;
}UIPI LOG V1.3 (Jan 12th 2018)
LOG FILE WITH INDEX :[1]
--------------------------------------
API LOG Test App.
This is a App header.
--------------------------------------
2021-09-10 13:24:04.625 INFO MAIN_OBJ --[10216]-----------
2021-09-10 13:24:04.625 INFO MAIN_OBJ Este es un mensaje de INFO
2021-09-10 13:24:04.625 WARN MAIN_OBJ Este es un mensaje de Warning
2021-09-10 13:24:04.625 ERROR MAIN_OBJ Este es un mensaje de ERROR
2021-09-10 13:24:04.626 DEBUG MAIN_OBJ Mensaje de un Buffer Cualqueira.
...
2021-09-10 13:24:06.840 INFO SECN_OBJ Este es un mensaje de INFO (Si aparece)
2021-09-10 13:24:06.840 INFO MAIN_OBJ --[12256]-----------
2021-09-10 13:24:06.840 INFO MAIN_OBJ Este es un mensaje de INFO
2021-09-10 13:24:06.840 WARN MAIN_OBJ Este es un mensaje de Warning
2021-09-10 13:24:06.840 ERROR MAIN_OBJ Este es un mensaje de ERROR
2021-09-10 13:24:06.840 DEBUG MAIN_OBJ Mensaje de un Buffer Cualqueira.
2021-09-10 13:24:06.840 DEBUG MAIN_OBJ Buffer: Size = 43
2021-09-10 13:24:06.840 DEBUG MAIN_OBJ HEX (Bytes 1-10) [10 11 12 13 14 15 16 17 18 19] (..........)
2021-09-10 13:24:06.840 DEBUG MAIN_OBJ HEX (Bytes 11-20) [40 41 42 43 44 45 46 47 48 49] (@ABCDEFGHI)
2021-09-10 13:24:06.840 DEBUG MAIN_OBJ HEX (Bytes 21-30) [50 51 52 53 54 55 56 57 58 59] (PQRSTUVWXY)
2021-09-10 13:24:06.840 DEBUG MAIN_OBJ HEX (Bytes 31-40) [60 61 62 63 64 65 66 67 68 69] (`abcdefghi)
2021-09-10 13:24:06.840 DEBUG MAIN_OBJ HEX (Bytes 41-43) [70 71 72 ] (pqr )
The log will continue in file [/home/jorge/vsworkspace/APILogCpp/logs/TestLog.3.log]...