Skip to content

Commit

Permalink
improve: logging to file can now be conditional
Browse files Browse the repository at this point in the history
  • Loading branch information
JessyDL committed Jun 14, 2024
1 parent 4ec0590 commit c70ef25
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 103 deletions.
2 changes: 1 addition & 1 deletion core/inc/core/logging.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,5 +39,5 @@ extern psl::profiling::profiler profiler;
namespace {
bool _loggers_initialized = false;
}
auto initialize_loggers() -> void;
auto initialize_loggers(bool to_file = true) -> void;
} // namespace core
131 changes: 35 additions & 96 deletions core/src/logging.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ inline std::tm localtime_safe(std::time_t timer) {
return bt;
}

auto core::initialize_loggers() -> void {
auto core::initialize_loggers(bool to_file) -> void {
if(core::_loggers_initialized) {
return;
}
Expand All @@ -54,16 +54,31 @@ auto core::initialize_loggers() -> void {
time.resize(20);
strftime(time.data(), 20, "%Y-%m-%d %H-%M-%S", &now_tm);
time[time.size() - 1] = '/';
psl::string sub_path = "logs/" + time;
if(!psl::utility::platform::file::exists(psl::utility::application::path::get_path() + sub_path + "main.log"))
psl::utility::platform::file::write(psl::utility::application::path::get_path() + sub_path + "main.log", "");
auto path = psl::utility::application::path::get_path();
psl::string sub_path = path + "logs/" + time;
std::vector<spdlog::sink_ptr> sinks;

auto make_sink = [](std::shared_ptr<spdlog::logger>& target,
psl::string_view name,
std::optional<psl::string_view> path,
auto&... additional_sinks) {
std::vector<spdlog::sink_ptr> sinks;
sinks.reserve(sizeof...(additional_sinks) + 1);
if(path) {
sinks.emplace_back(
std::make_shared<spdlog::sinks::basic_file_sink_mt>(psl::string {path.value()} + name + ".log", true));
}
(sinks.emplace_back(additional_sinks), ...);
auto logger = std::make_shared<spdlog::logger>(psl::string {name}, begin(sinks), end(sinks));
spdlog::register_logger(logger);
target = logger;
};

auto mainlogger = std::make_shared<spdlog::sinks::dist_sink_mt>();
mainlogger->add_sink(std::make_shared<spdlog::sinks::basic_file_sink_mt>(
psl::utility::application::path::get_path() + sub_path + "main.log", true));
mainlogger->add_sink(std::make_shared<spdlog::sinks::basic_file_sink_mt>(
psl::utility::application::path::get_path() + "logs/latest.log", true));
if(to_file) {
mainlogger->add_sink(std::make_shared<spdlog::sinks::basic_file_sink_mt>(sub_path + "main.log", true));
mainlogger->add_sink(std::make_shared<spdlog::sinks::basic_file_sink_mt>(path + "logs/latest.log", true));
}
#ifdef _MSC_VER
mainlogger->add_sink(std::make_shared<spdlog::sinks::msvc_sink_mt>());
#else
Expand All @@ -72,97 +87,21 @@ auto core::initialize_loggers() -> void {
mainlogger->add_sink(outlogger);
#endif

auto ivklogger = std::make_shared<spdlog::sinks::basic_file_sink_mt>(
psl::utility::application::path::get_path() + sub_path + "ivk.log", true);

auto igleslogger = std::make_shared<spdlog::sinks::basic_file_sink_mt>(
psl::utility::application::path::get_path() + sub_path + "igles.log", true);

auto iwgpulogger = std::make_shared<spdlog::sinks::basic_file_sink_mt>(
psl::utility::application::path::get_path() + sub_path + "iwgpu.log", true);

auto gfxlogger = std::make_shared<spdlog::sinks::basic_file_sink_mt>(
psl::utility::application::path::get_path() + sub_path + "gfx.log", true);

auto systemslogger = std::make_shared<spdlog::sinks::basic_file_sink_mt>(
psl::utility::application::path::get_path() + sub_path + "systems.log", true);

auto oslogger = std::make_shared<spdlog::sinks::basic_file_sink_mt>(
psl::utility::application::path::get_path() + sub_path + "os.log", true);

auto datalogger = std::make_shared<spdlog::sinks::basic_file_sink_mt>(
psl::utility::application::path::get_path() + sub_path + "data.log", true);

auto corelogger = std::make_shared<spdlog::sinks::basic_file_sink_mt>(
psl::utility::application::path::get_path() + sub_path + "core.log", true);

sinks.push_back(mainlogger);
sinks.push_back(corelogger);

auto logger = std::make_shared<spdlog::logger>("main", begin(sinks), end(sinks));
spdlog::register_logger(logger);
core::log = logger;


sinks.clear();
sinks.push_back(mainlogger);
sinks.push_back(systemslogger);

auto system_logger = std::make_shared<spdlog::logger>("systems", begin(sinks), end(sinks));
spdlog::register_logger(system_logger);
core::systems::log = system_logger;

sinks.clear();
sinks.push_back(mainlogger);
sinks.push_back(oslogger);

auto os_logger = std::make_shared<spdlog::logger>("os", begin(sinks), end(sinks));
spdlog::register_logger(os_logger);
core::os::log = os_logger;

sinks.clear();
sinks.push_back(mainlogger);
sinks.push_back(datalogger);

auto data_logger = std::make_shared<spdlog::logger>("data", begin(sinks), end(sinks));
spdlog::register_logger(data_logger);
core::data::log = data_logger;

sinks.clear();
sinks.push_back(mainlogger);
sinks.push_back(gfxlogger);

auto gfx_logger = std::make_shared<spdlog::logger>("gfx", begin(sinks), end(sinks));
spdlog::register_logger(gfx_logger);
core::gfx::log = gfx_logger;

#ifdef PE_VULKAN
sinks.clear();
sinks.push_back(mainlogger);
sinks.push_back(ivklogger);

auto ivk_logger = std::make_shared<spdlog::logger>("ivk", begin(sinks), end(sinks));
spdlog::register_logger(ivk_logger);
core::ivk::log = ivk_logger;
make_sink(core::log, "core", to_file ? std::make_optional(sub_path) : std::nullopt, mainlogger);
make_sink(core::gfx::log, "gfx", to_file ? std::make_optional(sub_path) : std::nullopt, mainlogger);
#if defined(PE_VULKAN)
make_sink(core::ivk::log, "ivk", to_file ? std::make_optional(sub_path) : std::nullopt, mainlogger);
#endif
#ifdef PE_GLES
sinks.clear();
sinks.push_back(mainlogger);
sinks.push_back(igleslogger);

auto igles_logger = std::make_shared<spdlog::logger>("igles", begin(sinks), end(sinks));
spdlog::register_logger(igles_logger);
core::igles::log = igles_logger;
#if defined(PE_GLES)
make_sink(core::igles::log, "igles", to_file ? std::make_optional(sub_path) : std::nullopt, mainlogger);
#endif
#ifdef PE_WEBGPU
sinks.clear();
sinks.push_back(mainlogger);
sinks.push_back(iwgpulogger);

auto iwgpu_logger = std::make_shared<spdlog::logger>("iwgpu", begin(sinks), end(sinks));
spdlog::register_logger(iwgpu_logger);
core::iwgpu::log = iwgpu_logger;
#if defined(PE_WEBGPU)
make_sink(core::iwgpu::log, "iwgpu", to_file ? std::make_optional(sub_path) : std::nullopt, mainlogger);
#endif
make_sink(core::data::log, "data", to_file ? std::make_optional(sub_path) : std::nullopt, mainlogger);
make_sink(core::systems::log, "systems", to_file ? std::make_optional(sub_path) : std::nullopt, mainlogger);
make_sink(core::os::log, "os", to_file ? std::make_optional(sub_path) : std::nullopt, mainlogger);

spdlog::set_pattern("%8T.%6f [%=8n] [%=8l] %^%v%$ %@", spdlog::pattern_time_type::utc);
}
#else
Expand Down
12 changes: 6 additions & 6 deletions psl/inc/psl/logging.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@


#ifndef DISABLE_LOGGING
#define LOG(...) spdlog::get("main")->info(__VA_ARGS__)
#define LOG(...) spdlog::get("core")->info(__VA_ARGS__)
#define LOG_INFO(...) LOG(__VA_ARGS__)
#define LOG_ERROR(...) spdlog::get("main")->error(__VA_ARGS__)
#define LOG_WARNING(...) spdlog::get("main")->warn(__VA_ARGS__)
#define LOG_PROFILE(...) spdlog::get("main")->trace(__VA_ARGS__)
#define LOG_DEBUG(...) spdlog::get("main")->debug(__VA_ARGS__)
#define LOG_FATAL(...) spdlog::get("main")->critical(__VA_ARGS__)
#define LOG_ERROR(...) spdlog::get("core")->error(__VA_ARGS__)
#define LOG_WARNING(...) spdlog::get("core")->warn(__VA_ARGS__)
#define LOG_PROFILE(...) spdlog::get("core")->trace(__VA_ARGS__)
#define LOG_DEBUG(...) spdlog::get("core")->debug(__VA_ARGS__)
#define LOG_FATAL(...) spdlog::get("core")->critical(__VA_ARGS__)
#else
#define TimeLog
#define LOG
Expand Down

0 comments on commit c70ef25

Please sign in to comment.