custom logging function
This commit is contained in:
parent
a8948bca73
commit
4ece64442f
|
@ -4,14 +4,6 @@
|
||||||
"dimensions": [864, 486],
|
"dimensions": [864, 486],
|
||||||
"fps": 60
|
"fps": 60
|
||||||
},
|
},
|
||||||
"path":
|
|
||||||
{
|
|
||||||
"screenshots": "local/screenshots",
|
|
||||||
"video": "local/video"
|
|
||||||
},
|
|
||||||
"gamepad":
|
|
||||||
{
|
|
||||||
},
|
|
||||||
"keys":
|
"keys":
|
||||||
{
|
{
|
||||||
"context": " ",
|
"context": " ",
|
||||||
|
@ -20,6 +12,8 @@
|
||||||
},
|
},
|
||||||
"recording":
|
"recording":
|
||||||
{
|
{
|
||||||
|
"screenshot-directory": "local/screenshots",
|
||||||
|
"video-directory": "local/video"
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"write-mp4": true,
|
"write-mp4": true,
|
||||||
"video-frame-length": 16.667,
|
"video-frame-length": 16.667,
|
||||||
|
|
|
@ -38,10 +38,6 @@ void Configuration::set_defaults()
|
||||||
{"default-unsuppress-delay", 700},
|
{"default-unsuppress-delay", 700},
|
||||||
{"ignore-repeat-keypress", true}
|
{"ignore-repeat-keypress", true}
|
||||||
};
|
};
|
||||||
sys_config["path"] = {
|
|
||||||
{"screenshots", "."},
|
|
||||||
{"video", "."}
|
|
||||||
};
|
|
||||||
sys_config["display"] = {
|
sys_config["display"] = {
|
||||||
{"dimensions", {640, 480}},
|
{"dimensions", {640, 480}},
|
||||||
{"framerate", 60},
|
{"framerate", 60},
|
||||||
|
@ -60,7 +56,9 @@ void Configuration::set_defaults()
|
||||||
{"screenshot-prefix", "screenshot-"},
|
{"screenshot-prefix", "screenshot-"},
|
||||||
{"screenshot-extension", ".png"},
|
{"screenshot-extension", ".png"},
|
||||||
{"screenshot-zfill", 5},
|
{"screenshot-zfill", 5},
|
||||||
|
{"screenshot-directory", "."},
|
||||||
{"gif-frame-length", 100},
|
{"gif-frame-length", 100},
|
||||||
|
{"video-directory", "."},
|
||||||
{"write-mp4", false},
|
{"write-mp4", false},
|
||||||
{"max-stash-length", 5000},
|
{"max-stash-length", 5000},
|
||||||
{"max-in-game-stashes", 3},
|
{"max-in-game-stashes", 3},
|
||||||
|
@ -77,6 +75,13 @@ void Configuration::set_defaults()
|
||||||
sys_config["animation"] = {
|
sys_config["animation"] = {
|
||||||
{"all-frames-frameset-name", "all"}
|
{"all-frames-frameset-name", "all"}
|
||||||
};
|
};
|
||||||
|
sys_config["logging"] = {
|
||||||
|
{"enabled", false},
|
||||||
|
{"debug", false},
|
||||||
|
{"ouput-directory", "."},
|
||||||
|
{"info-file-name", "log.txt"},
|
||||||
|
{"debug-file-name", "debug_log.txt"}
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
void Configuration::load()
|
void Configuration::load()
|
||||||
|
|
42
src/Game.cpp
42
src/Game.cpp
|
@ -39,9 +39,49 @@ void FramerateIndicator::refresh()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void log(void* userdata, int category, SDL_LogPriority priority, const char* message)
|
||||||
|
{
|
||||||
|
Game* game = static_cast<Game*>(userdata);
|
||||||
|
std::ostream& out = (priority > SDL_LOG_PRIORITY_DEBUG) ? std::cerr : std::cout;
|
||||||
|
out << message << std::endl;
|
||||||
|
if (game->get_configuration()["logging"]["enabled"])
|
||||||
|
{
|
||||||
|
fs::path path = game->get_configuration()["logging"]["output-directory"];
|
||||||
|
if (!fs::exists(path))
|
||||||
|
{
|
||||||
|
fs::create_directories(path);
|
||||||
|
}
|
||||||
|
std::time_t now = std::time(nullptr);
|
||||||
|
std::stringstream stamped_message;
|
||||||
|
stamped_message << std::put_time(std::localtime(&now), "%F %T ") << message;
|
||||||
|
if (game->get_configuration()["logging"]["debug"])
|
||||||
|
{
|
||||||
|
fs::path debug_path = path / game->get_configuration()["logging"]["debug-file-name"];
|
||||||
|
std::ofstream debug_stream(debug_path, std::ios_base::app);
|
||||||
|
debug_stream << stamped_message.str() << std::endl;
|
||||||
|
}
|
||||||
|
if (priority > SDL_LOG_PRIORITY_DEBUG)
|
||||||
|
{
|
||||||
|
fs::path info_path = path / game->get_configuration()["logging"]["info-file-name"];
|
||||||
|
std::ofstream info_stream(info_path, std::ios_base::app);
|
||||||
|
info_stream << stamped_message.str() << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Game::Game()
|
Game::Game()
|
||||||
{
|
{
|
||||||
std::cout << std::setw(4) << get_configuration() << std::endl;
|
// use config to determine if debug statements should be printed
|
||||||
|
if (get_configuration()["logging"]["debug"])
|
||||||
|
{
|
||||||
|
SDL_LogSetPriority(SDL_LOG_CATEGORY_APPLICATION, SDL_LOG_PRIORITY_DEBUG);
|
||||||
|
}
|
||||||
|
// set custom log function (prints to stdout/stderr and to file if enabled)
|
||||||
|
SDL_LogSetOutputFunction(&log, this);
|
||||||
|
// pretty print config to debug log
|
||||||
|
std::stringstream config_formatted;
|
||||||
|
config_formatted << std::setw(4) << get_configuration() << std::endl;
|
||||||
|
SDL_LogDebug(SDL_LOG_CATEGORY_APPLICATION, "%s", config_formatted.str().c_str());
|
||||||
SDL_SetHint(SDL_HINT_RENDER_DRIVER, get_configuration()["display"]["render driver"].get<std::string>().c_str());
|
SDL_SetHint(SDL_HINT_RENDER_DRIVER, get_configuration()["display"]["render driver"].get<std::string>().c_str());
|
||||||
frame_length_history.reserve(5000);
|
frame_length_history.reserve(5000);
|
||||||
set_framerate(get_configuration()["display"]["framerate"]);
|
set_framerate(get_configuration()["display"]["framerate"]);
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <sstream>
|
#include <sstream>
|
||||||
|
#include <ctime>
|
||||||
|
|
||||||
#define SDL_MAIN_HANDLED
|
#define SDL_MAIN_HANDLED
|
||||||
#include "SDL.h"
|
#include "SDL.h"
|
||||||
|
@ -41,6 +42,8 @@ struct FramerateIndicator : Sprite
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void log(void*, int, SDL_LogPriority, const char*);
|
||||||
|
|
||||||
struct Game : Node
|
struct Game : Node
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ void Recorder::capture_screen()
|
||||||
{
|
{
|
||||||
nlohmann::json config = get_configuration();
|
nlohmann::json config = get_configuration();
|
||||||
SDL_Surface* surface = get_display().get_screen_surface();
|
SDL_Surface* surface = get_display().get_screen_surface();
|
||||||
fs::path directory = config["path"]["screenshots"];
|
fs::path directory = config["recording"]["screenshot-directory"];
|
||||||
fs::create_directories(directory);
|
fs::create_directories(directory);
|
||||||
std::string prefix = config["recording"]["screenshot-prefix"].
|
std::string prefix = config["recording"]["screenshot-prefix"].
|
||||||
get<std::string>();
|
get<std::string>();
|
||||||
|
@ -222,7 +222,7 @@ int Recorder::get_memory_size()
|
||||||
void Recorder::make_directory()
|
void Recorder::make_directory()
|
||||||
{
|
{
|
||||||
nlohmann::json config = get_configuration();
|
nlohmann::json config = get_configuration();
|
||||||
fs::path root = config["path"]["video"];
|
fs::path root = config["recording"]["video-directory"];
|
||||||
fs::create_directories(root);
|
fs::create_directories(root);
|
||||||
fs::path directory = sfw::get_next_file_name(root, 5, "video-");
|
fs::path directory = sfw::get_next_file_name(root, 5, "video-");
|
||||||
fs::create_directories(directory);
|
fs::create_directories(directory);
|
||||||
|
|
Loading…
Reference in New Issue