Skip to content

Commit

Permalink
Merge branch 'master' into 60-csv-outputter-for-benchmarks
Browse files Browse the repository at this point in the history
  • Loading branch information
TobiasEppacher authored Dec 6, 2023
2 parents 5acdc1a + d5bb070 commit cdb2b68
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 7 deletions.
16 changes: 15 additions & 1 deletion src/io/cli/CLIParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@

#include "io/logger/Logger.h"
#include "io/output/FileOutputHandler.h"
#include "spdlog/sinks/rotating_file_sink.h"

SimulationParams parse_arguments(int argc, char* argsv[]) {
std::string input_file_path;
std::string output_dir_path;
std::string log_level;
std::string output_format;
std::string log_output;

double end_time = 0;
double delta_t = 0;
Expand Down Expand Up @@ -40,8 +42,10 @@ SimulationParams parse_arguments(int argc, char* argsv[]) {
"The log level. Possible values: trace, debug, info, warning, error, critical, off");
options_desc.add_options()("output_format", boost::program_options::value<std::string>(&output_format)->default_value("vtk"),
"The output format. Possible values: vtk, xyz, none");
// add -p flag that stand for performance test
options_desc.add_options()("performance_test,p", "Run the simulation in performance test mode");
options_desc.add_options()(
"log_output", boost::program_options::value<std::string>(&log_output)->default_value("std"),
"You can only choose between the output options std(only cl output) and file (only file output). Default: no file output");

boost::program_options::positional_options_description positional_options_desc;
positional_options_desc.add("input_file_path", -1);
Expand All @@ -52,6 +56,16 @@ SimulationParams parse_arguments(int argc, char* argsv[]) {
variables_map);
boost::program_options::notify(variables_map);

if (log_output == "std" || log_output == "STD") {
Logger::logger->info("Log output: std");
} else if (log_output == "file" || log_output == "FILE") {
Logger::logger = Logger::init_logger(Logger::LogType::FILE);
Logger::logger->info("Log output: file");
} else {
std::cout << "Error: Invalid log output given. Options: no file output: 'std' and file output: 'file'" << std::endl;
exit(-1);
}

if (log_level == "trace") {
Logger::logger->set_level(spdlog::level::trace);
} else if (log_level == "debug") {
Expand Down
28 changes: 24 additions & 4 deletions src/io/logger/Logger.cpp
Original file line number Diff line number Diff line change
@@ -1,11 +1,26 @@
#include "Logger.h"

#include <filesystem>
#include <iostream>

#include "spdlog/async.h"
#include "spdlog/sinks/rotating_file_sink.h"
#include "spdlog/sinks/stdout_color_sinks.h"

std::shared_ptr<spdlog::logger> Logger::logger = init_logger();

std::shared_ptr<spdlog::logger> Logger::init_logger() {
void createDirectory(const std::string& dir_name) {
if (!std::filesystem::exists(dir_name)) {
try {
std::filesystem::create_directory(dir_name);
} catch (const std::filesystem::filesystem_error& e) {
std::cerr << "Error creating directory: " << e.what() << std::endl;
exit(-1);
}
}
}

std::shared_ptr<spdlog::logger> Logger::init_logger(LogType log_type) {
auto standard_out = std::make_shared<spdlog::sinks::stdout_color_sink_mt>();
standard_out->set_color(spdlog::level::critical, standard_out->dark);
standard_out->set_color(spdlog::level::err, standard_out->red);
Expand All @@ -15,9 +30,14 @@ std::shared_ptr<spdlog::logger> Logger::init_logger() {
standard_out->set_color(spdlog::level::trace, standard_out->magenta);

spdlog::init_thread_pool(8192, 1);
std::shared_ptr<spdlog::logger> logger =
std::make_shared<spdlog::async_logger>("logger", standard_out, spdlog::thread_pool(), spdlog::async_overflow_policy::block);
spdlog::register_logger(logger);
std::shared_ptr<spdlog::logger> logger;
if (log_type == LogType::FILE) {
createDirectory("logs");
logger = spdlog::rotating_logger_st("file_logger", "logs/log", 1048576 * 5, 3);
} else {
logger =
std::make_shared<spdlog::async_logger>("std_logger", standard_out, spdlog::thread_pool(), spdlog::async_overflow_policy::block);
}

logger->set_level(spdlog::level::off);
logger->set_pattern("[%H:%M:%S] %^[%l]%$ %v");
Expand Down
9 changes: 7 additions & 2 deletions src/io/logger/Logger.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,17 @@
* @brief Class as wrapper and initializer for a globally usable logger
*/
class Logger {
public:
/**
* @brief Enum for the type of logger
*/
enum class LogType { FILE, STD };

/**
* @brief Initializes the logger
*/
static std::shared_ptr<spdlog::logger> init_logger();
static std::shared_ptr<spdlog::logger> init_logger(LogType log_type = LogType::STD);

public:
/**
* @brief Publically accessible shared pointer to the logger
*
Expand Down

0 comments on commit cdb2b68

Please sign in to comment.