Wrote the print_logs funciton for debugging and changed the location of the test .log files
This commit is contained in:
@@ -5,9 +5,10 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <regex>
|
#include <regex>
|
||||||
|
|
||||||
#include "log_parsing.h"
|
#include "log_parsing.hpp"
|
||||||
|
|
||||||
|
p_logs::p_logs(std::string log_path) {
|
||||||
|
|
||||||
parsed_logs::parsed_logs(std::string log_path) {
|
|
||||||
std::ifstream file(log_path);
|
std::ifstream file(log_path);
|
||||||
if (!file.is_open()) {
|
if (!file.is_open()) {
|
||||||
std::cerr << "Error loading " << log_path << std::endl;
|
std::cerr << "Error loading " << log_path << std::endl;
|
||||||
@@ -19,8 +20,8 @@ parsed_logs::parsed_logs(std::string log_path) {
|
|||||||
std::string line;
|
std::string line;
|
||||||
std::smatch match;
|
std::smatch match;
|
||||||
|
|
||||||
while (std::getline(file, line)) {
|
while (getline(file, line)) {
|
||||||
if (std::regex_search(line, match, log_pattern)) {
|
if (regex_search(line, match, log_pattern)) {
|
||||||
|
|
||||||
Entry current_entry;
|
Entry current_entry;
|
||||||
current_entry.ip = match[1].str();
|
current_entry.ip = match[1].str();
|
||||||
@@ -55,34 +56,48 @@ parsed_logs::parsed_logs(std::string log_path) {
|
|||||||
file.close();
|
file.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string parsed_logs::entryx_ip(int x){
|
std::string p_logs::entryx_ip(int x){
|
||||||
return logs[x].ip;
|
return logs[x].ip;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string parsed_logs::entryx_timestamp(int x){
|
std::string p_logs::entryx_timestamp(int x){
|
||||||
return logs[x].timestamp;
|
return logs[x].timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string parsed_logs::entryx_request(int x){
|
std::string p_logs::entryx_request(int x){
|
||||||
return logs[x].request;
|
return logs[x].request;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string parsed_logs::entryx_status(int x){
|
std::string p_logs::entryx_status(int x){
|
||||||
return logs[x].status;
|
return logs[x].status;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string parsed_logs::entryx_bytes(int x){
|
std::string p_logs::entryx_bytes(int x){
|
||||||
return logs[x].bytes;
|
return logs[x].bytes;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string parsed_logs::entryx_referer(int x){
|
std::string p_logs::entryx_referer(int x){
|
||||||
return logs[x].referer;
|
return logs[x].referer;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string parsed_logs::entryx_os(int x){
|
std::string p_logs::entryx_os(int x){
|
||||||
return logs[x].os;
|
return logs[x].os;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string parsed_logs::entryx_browser(int x){
|
std::string p_logs::entryx_browser(int x){
|
||||||
return logs[x].browser;
|
return logs[x].browser;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void p_logs::print_logs() {
|
||||||
|
for (const auto& log : logs) {
|
||||||
|
std::cout << "IP: " << log.ip.c_str() << "\n"
|
||||||
|
<< "Timestamp: " << log.timestamp.c_str() << "\n"
|
||||||
|
<< "Request: " << log.request.c_str() << "\n"
|
||||||
|
<< "Status: " << log.status.c_str() << "\n"
|
||||||
|
<< "Bytes: " << log.bytes.c_str() << "\n"
|
||||||
|
<< "Referer: " << log.referer.c_str() << "\n"
|
||||||
|
<< "OS: " << log.os.c_str() << "\n"
|
||||||
|
<< "Browser: " << log.browser.c_str() << "\n\n"
|
||||||
|
<< "-----------------------------\n\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -24,7 +24,7 @@ struct Entry {
|
|||||||
std::string browser;
|
std::string browser;
|
||||||
};
|
};
|
||||||
|
|
||||||
class parsed_logs {
|
class p_logs {
|
||||||
private:
|
private:
|
||||||
Entry entry;
|
Entry entry;
|
||||||
std::vector<Entry> logs;
|
std::vector<Entry> logs;
|
||||||
@@ -35,7 +35,7 @@ public:
|
|||||||
* Detailed explanation: This function takes in the absolute path to a .log file and parses the lines into individual "Entry"s. These Entrys are then stored into a vector that can then be accessed via getter functions.
|
* Detailed explanation: This function takes in the absolute path to a .log file and parses the lines into individual "Entry"s. These Entrys are then stored into a vector that can then be accessed via getter functions.
|
||||||
* @param string
|
* @param string
|
||||||
*/
|
*/
|
||||||
parsed_logs(std::string);
|
p_logs(std::string);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Getter function for a specific Entry's IP
|
* @brief Getter function for a specific Entry's IP
|
||||||
@@ -100,4 +100,10 @@ public:
|
|||||||
* @return std::string
|
* @return std::string
|
||||||
*/
|
*/
|
||||||
std::string entryx_browser(int);
|
std::string entryx_browser(int);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Prints all parsed log entries
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void print_logs();
|
||||||
};
|
};
|
||||||
7
main.cpp
7
main.cpp
@@ -1,4 +1,7 @@
|
|||||||
|
#include "log_parsing/log_parsing.hpp"
|
||||||
int main(){
|
int main(){
|
||||||
|
p_logs logs("C:\\Users\\lewis\\Desktop\\Code\\parselog_cli\\test_logs\\access.log");
|
||||||
|
logs.print_logs();
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
BIN
parselog_cli.exe
Normal file
BIN
parselog_cli.exe
Normal file
Binary file not shown.
Reference in New Issue
Block a user