Compare commits
No commits in common. "dev" and "testing" have entirely different histories.
5
.gitignore
vendored
5
.gitignore
vendored
@ -1,4 +1,3 @@
|
||||
.vscode
|
||||
example
|
||||
test/*.o
|
||||
build
|
||||
example/*
|
||||
test/*.o
|
@ -1,30 +0,0 @@
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
|
||||
project(log)
|
||||
|
||||
# Postavi verziju projekta
|
||||
set(CMAKE_CXX_STANDARD 11)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
# Pronađi Boost biblioteku (ako nije uobičajeni direktorijum, postavi put)
|
||||
# find_package(Boost REQUIRED COMPONENTS system)
|
||||
|
||||
# Dodaj direktorijume sa zaglavljima
|
||||
include_directories(lib)
|
||||
|
||||
# Dodaj biblioteku
|
||||
add_library(log STATIC
|
||||
src/log.cpp
|
||||
)
|
||||
|
||||
# # Linkaj log biblioteku sa Boost-om
|
||||
# target_link_libraries(log Boost::system)
|
||||
|
||||
# Dodaj testove
|
||||
add_subdirectory(test)
|
||||
|
||||
|
||||
# Instaliraj biblioteku
|
||||
# install(TARGETS log DESTINATION lib)
|
||||
# install(FILES lib/log.hpp lib/define.hpp lib/engine.hpp lib/filesystem.hpp lib/timers.hpp lib/trigger.hpp DESTINATION include/log)
|
||||
#
|
@ -10,7 +10,6 @@ Logging errors to a file, daily file rotation, date and time stamps. Configurabl
|
||||
- Customizable directory for files
|
||||
- Daily file rotation
|
||||
- Protection of recording consecutive errors
|
||||
- Log levels
|
||||
- Thread safe
|
||||
- Exceptions
|
||||
- The possibility of printing logs in the console
|
||||
@ -32,16 +31,12 @@ using namespace marcelb;
|
||||
/**
|
||||
* Initialization and declaration
|
||||
*/
|
||||
log mylog("../log", Level::INFO);
|
||||
log mylog("../log");
|
||||
|
||||
/**
|
||||
* Put log in file
|
||||
*/
|
||||
mylog.debug("Debug loging");
|
||||
mylog.info("Info loging");
|
||||
mylog.warning("Warning loging");
|
||||
mylog.error("Error loging");
|
||||
mylog.fatal("Fatal loging");
|
||||
mylog.put("[EVENT] Start loging");
|
||||
```
|
||||
## License
|
||||
|
||||
|
1
example/2023-05-21.log
Normal file
1
example/2023-05-21.log
Normal file
@ -0,0 +1 @@
|
||||
23:08:58 [EVENT] Start loging
|
3
example/2023-07-27.log
Normal file
3
example/2023-07-27.log
Normal file
@ -0,0 +1,3 @@
|
||||
18:29:30 [EVENT] Start loging
|
||||
18:29:44 [EVENT] Start loging
|
||||
18:29:47 [EVENT] Start loging
|
5
example/2023-5-20.log
Normal file
5
example/2023-5-20.log
Normal file
@ -0,0 +1,5 @@
|
||||
[EVENT] Start loging
|
||||
[EVENT] Start loging
|
||||
10:58:12 [EVENT] Start loging
|
||||
10:59:19 [EVENT] Start loging
|
||||
11:00:17 [EVENT] Start loging
|
2
example/2023-5-21.log
Normal file
2
example/2023-5-21.log
Normal file
@ -0,0 +1,2 @@
|
||||
11:00:58 [EVENT] Start loging
|
||||
13:02:17 [EVENT] Start loging
|
49
lib/log.hpp
49
lib/log.hpp
@ -4,34 +4,20 @@
|
||||
#include <iostream>
|
||||
#include <iomanip>
|
||||
#include <string>
|
||||
#include <sstream>
|
||||
#include <fstream>
|
||||
#include <time.h>
|
||||
#include <sys/stat.h>
|
||||
#include <mutex>
|
||||
|
||||
#if _WIN32
|
||||
typedef unsigned int uint;
|
||||
#endif
|
||||
namespace marcelb {
|
||||
namespace logging {
|
||||
|
||||
using namespace std;
|
||||
|
||||
typedef enum {
|
||||
DEBUG = 0,
|
||||
INFO,
|
||||
WARNING,
|
||||
ERROR,
|
||||
FATAL,
|
||||
} Level;
|
||||
|
||||
/**
|
||||
* Log class - used at the level of one log directory
|
||||
*/
|
||||
class log {
|
||||
string dir;
|
||||
Level loglevel;
|
||||
bool isKeepOpen;
|
||||
bool printInConsole;
|
||||
ofstream logfile;
|
||||
@ -68,12 +54,7 @@ class log {
|
||||
/**
|
||||
* Set log line time prefix
|
||||
*/
|
||||
void setPrefix(string &logline, Level &_level);
|
||||
|
||||
/**
|
||||
* Put string log in file
|
||||
*/
|
||||
void put(string logline, Level _level);
|
||||
void setPrefix(string &logline);
|
||||
|
||||
public:
|
||||
|
||||
@ -83,33 +64,12 @@ class log {
|
||||
* optional: a bool variable if it keeps the file open,
|
||||
* and a bool variable if it prints log lines to the console
|
||||
*/
|
||||
log (string _dir, Level loglevel = WARNING, bool _isKeepOpen = true, bool _printInConsole = false);
|
||||
|
||||
log (string _dir, bool _isKeepOpen = true, bool _printInConsole = false);
|
||||
|
||||
/**
|
||||
* Debug log line
|
||||
* Put string log in file
|
||||
*/
|
||||
void debug(string logline);
|
||||
|
||||
/**
|
||||
* Info log line
|
||||
*/
|
||||
void info(string logline);
|
||||
|
||||
/**
|
||||
* Warning log line
|
||||
*/
|
||||
void warning(string logline);
|
||||
|
||||
/**
|
||||
* Error log line
|
||||
*/
|
||||
void error(string logline);
|
||||
|
||||
/**
|
||||
* Fatal log line
|
||||
*/
|
||||
void fatal(string logline);
|
||||
void put(string logline);
|
||||
|
||||
/**
|
||||
* Destruktor, close log files
|
||||
@ -117,7 +77,6 @@ class log {
|
||||
~log();
|
||||
};
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
76
src/log.cpp
76
src/log.cpp
@ -1,11 +1,7 @@
|
||||
#include "../lib/log.hpp"
|
||||
|
||||
namespace marcelb {
|
||||
namespace logging {
|
||||
|
||||
log::log(string _dir, Level _loglevel, bool _isKeepOpen, bool _printInConsole) {
|
||||
marcelb::log::log(string _dir, bool _isKeepOpen, bool _printInConsole) {
|
||||
dir = _dir;
|
||||
loglevel = _loglevel;
|
||||
isKeepOpen = _isKeepOpen;
|
||||
printInConsole = _printInConsole;
|
||||
|
||||
@ -25,38 +21,35 @@ log::log(string _dir, Level _loglevel, bool _isKeepOpen, bool _printInConsole) {
|
||||
|
||||
}
|
||||
|
||||
bool log::isdir() {
|
||||
bool marcelb::log::isdir() {
|
||||
struct stat sb;
|
||||
return stat(dir.c_str(), &sb) == 0;
|
||||
}
|
||||
|
||||
bool log::open() {
|
||||
bool marcelb::log::open() {
|
||||
logfile = ofstream (path, ios_base::app);
|
||||
return logfile.is_open();
|
||||
}
|
||||
|
||||
|
||||
void log::loose() {
|
||||
void marcelb::log::loose() {
|
||||
logfile.close();
|
||||
}
|
||||
|
||||
void log::setMoment() {
|
||||
void marcelb::log::setMoment() {
|
||||
time_t rawtime;
|
||||
time (&rawtime);
|
||||
moment = localtime (&rawtime);
|
||||
}
|
||||
|
||||
void log::put(string logline, Level _level) {
|
||||
if (_level < loglevel) {
|
||||
return;
|
||||
}
|
||||
void marcelb::log::put(string logline) {
|
||||
io.lock();
|
||||
if (printInConsole) {
|
||||
cout << logline << endl;
|
||||
}
|
||||
|
||||
setMoment();
|
||||
setPrefix(logline, _level);
|
||||
setPrefix(logline);
|
||||
|
||||
if (day != moment->tm_mday) {
|
||||
if (isKeepOpen && logfile.is_open()) {
|
||||
@ -86,7 +79,7 @@ void log::put(string logline, Level _level) {
|
||||
|
||||
}
|
||||
|
||||
void log::setPath() {
|
||||
void marcelb::log::setPath() {
|
||||
if (dir[dir.length()-1] != '/') {
|
||||
dir.push_back('/');
|
||||
}
|
||||
@ -97,62 +90,17 @@ void log::setPath() {
|
||||
path = dir + to_string(moment->tm_year+1900) + '-' + mon.str() + '-' + _day.str() + ".log";
|
||||
}
|
||||
|
||||
void log::setPrefix(string &logline, Level &_level) {
|
||||
void marcelb::log::setPrefix(string &logline) {
|
||||
stringstream hour, min, sec;
|
||||
hour << setw(2) << setfill('0') << moment->tm_hour;
|
||||
min << setw(2) << setfill('0') << moment->tm_min;
|
||||
sec << setw(2) << setfill('0') << moment->tm_sec;
|
||||
|
||||
string _logline = hour.str() + ':' + min.str() + ':' + sec.str();// + logline;
|
||||
switch (_level) {
|
||||
case DEBUG:
|
||||
_logline += " [DEBUG] ";
|
||||
break;
|
||||
case INFO:
|
||||
_logline += " [INFO] ";
|
||||
break;
|
||||
case WARNING:
|
||||
_logline += " [WARNING] ";
|
||||
break;
|
||||
case ERROR:
|
||||
_logline += " [ERROR] ";
|
||||
break;
|
||||
case FATAL:
|
||||
_logline += " [FATAL] ";
|
||||
break;
|
||||
default:
|
||||
_logline += " [UNAKOWN] ";
|
||||
break;
|
||||
|
||||
}
|
||||
logline = _logline + logline;
|
||||
string _logline = hour.str() + ':' + min.str() + ':' + sec.str() + ' ' + logline;
|
||||
logline = _logline;
|
||||
}
|
||||
|
||||
void log::debug(string logline) {
|
||||
put(logline, DEBUG);
|
||||
}
|
||||
|
||||
void log::info(string logline) {
|
||||
put(logline, INFO);
|
||||
}
|
||||
|
||||
void log::warning(string logline) {
|
||||
put(logline, WARNING);
|
||||
}
|
||||
|
||||
void log::error(string logline) {
|
||||
put(logline, ERROR);
|
||||
}
|
||||
|
||||
void log::fatal(string logline) {
|
||||
put(logline, FATAL);
|
||||
}
|
||||
|
||||
|
||||
log::~log() {
|
||||
marcelb::log::~log() {
|
||||
loose();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -1,3 +0,0 @@
|
||||
add_executable(log_test test.cpp)
|
||||
|
||||
target_link_libraries(log_test log)
|
@ -3,16 +3,15 @@
|
||||
#include "../lib/log.hpp"
|
||||
|
||||
using namespace std;
|
||||
using namespace marcelb::logging;
|
||||
using namespace marcelb;
|
||||
|
||||
log mylog("../example", Level::INFO, false);
|
||||
log mylog("../example", false);
|
||||
|
||||
int main() {
|
||||
mylog.debug("Start debug loging");
|
||||
mylog.info("Start info loging");
|
||||
mylog.warning("Start warning loging");
|
||||
mylog.error("Start error loging");
|
||||
mylog.fatal("Start fatal loging");
|
||||
|
||||
// log mylog("../example", false);
|
||||
|
||||
mylog.put("[EVENT] Start loging");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
BIN
test/test.o
Executable file
BIN
test/test.o
Executable file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user