From 93506a0d189c4c5098cea6a42f32d31989da9bca Mon Sep 17 00:00:00 2001 From: jdgleaver Date: Thu, 21 Mar 2019 16:56:24 +0000 Subject: [PATCH] Log to file improvements --- config.def.h | 6 -- configuration.c | 26 +++++--- configuration.h | 1 - file_path_special.h | 4 +- file_path_str.c | 6 ++ frontend/drivers/platform_unix.c | 2 + intl/msg_hash_lbl.h | 4 ++ intl/msg_hash_us.h | 16 +++++ menu/cbs/menu_cbs_sublabel.c | 8 +++ menu/cbs/menu_cbs_title.c | 7 +++ menu/menu_displaylist.c | 6 ++ menu/menu_setting.c | 52 ++++++++++++++++ msg_hash.h | 3 + retroarch.c | 104 +++++++++++++++++++++++-------- retroarch.h | 4 ++ verbosity.c | 10 ++- verbosity.h | 2 +- 17 files changed, 212 insertions(+), 49 deletions(-) diff --git a/config.def.h b/config.def.h index a907065740..97a95dacb1 100644 --- a/config.def.h +++ b/config.def.h @@ -439,11 +439,7 @@ static bool menu_swap_ok_cancel_buttons = false; static bool quit_press_twice = false; -#if defined(ANDROID) -static bool default_log_to_file = true; -#else static bool default_log_to_file = false; -#endif /* Crop overscanned frames. */ static const bool crop_overscan = true; @@ -922,6 +918,4 @@ static char buildbot_assets_server_url[] = "http://buildbot.libretro.com/assets/ static char default_discord_app_id[] = "475456035851599874"; -static char default_log_file[] = "retroarch.log"; - #endif diff --git a/configuration.c b/configuration.c index d0dab08378..07af9cdc0a 100644 --- a/configuration.c +++ b/configuration.c @@ -1310,8 +1310,7 @@ static struct config_path_setting *populate_settings_path(settings_t *settings, global->record.config_dir, false, NULL, true); } - SETTING_ARRAY("log_file", settings->paths.log_file, true, default_log_file, true); - SETTING_ARRAY("log_dir", settings->paths.log_dir, true, "", true); + SETTING_ARRAY("log_dir", settings->paths.log_dir, true, NULL, true); *size = count; @@ -1594,6 +1593,7 @@ static struct config_bool_setting *populate_settings_bool(settings_t *settings, #ifdef HAVE_OZONE SETTING_BOOL("ozone_collapse_sidebar", &settings->bools.ozone_collapse_sidebar, true, ozone_collapse_sidebar, false); #endif + SETTING_BOOL("log_to_file", &settings->bools.log_to_file, true, default_log_to_file, false); *size = count; @@ -1961,12 +1961,6 @@ void config_set_defaults(void) strlcpy(settings->arrays.discord_app_id, default_discord_app_id, sizeof(settings->arrays.discord_app_id)); - strlcpy(settings->paths.log_file, - default_log_file, sizeof(settings->paths.log_file)); - - strlcpy(settings->paths.log_dir, - g_defaults.dirs[DEFAULT_DIR_LOGS], sizeof(settings->paths.log_dir)); - #ifdef HAVE_MATERIALUI if (g_defaults.menu.materialui.menu_color_theme_enable) settings->uints.menu_materialui_color_theme = g_defaults.menu.materialui.menu_color_theme; @@ -2128,6 +2122,8 @@ void config_set_defaults(void) *settings->paths.directory_content_history = '\0'; *settings->paths.path_audio_dsp_plugin = '\0'; + *settings->paths.log_dir = '\0'; + video_driver_default_settings(); if (!string_is_empty(g_defaults.dirs[DEFAULT_DIR_WALLPAPERS])) @@ -3160,6 +3156,20 @@ static bool config_load_file(const char *path, bool set_defaults, if (string_is_equal(settings->paths.directory_system, "default")) *settings->paths.directory_system = '\0'; + /* Log directory is a special case, since it must contain + * a valid path as soon as possible - if config file + * value is 'default' must copy g_defaults.dirs[DEFAULT_DIR_LOGS] + * directly... */ + if (string_is_equal(settings->paths.log_dir, "default")) + { + if (!string_is_empty(g_defaults.dirs[DEFAULT_DIR_LOGS])) + strlcpy(settings->paths.log_dir, + g_defaults.dirs[DEFAULT_DIR_LOGS], + sizeof(settings->paths.log_dir)); + else + *settings->paths.log_dir = '\0'; + } + if (settings->floats.slowmotion_ratio < 1.0f) configuration_set_float(settings, settings->floats.slowmotion_ratio, 1.0f); diff --git a/configuration.h b/configuration.h index d2057a8093..4919a22c14 100644 --- a/configuration.h +++ b/configuration.h @@ -594,7 +594,6 @@ typedef struct settings char streaming_title[PATH_MAX_LENGTH]; char log_dir[PATH_MAX_LENGTH]; - char log_file[PATH_MAX_LENGTH]; } paths; bool modified; diff --git a/file_path_special.h b/file_path_special.h index 8b7cc3e3ef..481528dd47 100644 --- a/file_path_special.h +++ b/file_path_special.h @@ -94,7 +94,9 @@ enum file_path_enum FILE_PATH_XM_EXTENSION, FILE_PATH_CONFIG_EXTENSION, FILE_PATH_CORE_INFO_EXTENSION, - FILE_PATH_RUNTIME_EXTENSION + FILE_PATH_RUNTIME_EXTENSION, + FILE_PATH_DEFAULT_EVENT_LOG, + FILE_PATH_EVENT_LOG_EXTENSION }; enum application_special_type diff --git a/file_path_str.c b/file_path_str.c index 46aad7605f..43515babc9 100644 --- a/file_path_str.c +++ b/file_path_str.c @@ -227,6 +227,12 @@ const char *file_path_str(enum file_path_enum enum_idx) case FILE_PATH_RUNTIME_EXTENSION: str = ".lrtl"; break; + case FILE_PATH_DEFAULT_EVENT_LOG: + str = "retroarch.log"; + break; + case FILE_PATH_EVENT_LOG_EXTENSION: + str = ".log"; + break; case FILE_PATH_UNKNOWN: default: break; diff --git a/frontend/drivers/platform_unix.c b/frontend/drivers/platform_unix.c index 2fd9914449..f823dfb698 100644 --- a/frontend/drivers/platform_unix.c +++ b/frontend/drivers/platform_unix.c @@ -1920,6 +1920,8 @@ static void frontend_unix_get_env(int *argc, "screenshots", sizeof(g_defaults.dirs[DEFAULT_DIR_SCREENSHOT])); fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_THUMBNAILS], base_path, "thumbnails", sizeof(g_defaults.dirs[DEFAULT_DIR_THUMBNAILS])); + fill_pathname_join(g_defaults.dirs[DEFAULT_DIR_LOGS], base_path, + "logs", sizeof(g_defaults.dirs[DEFAULT_DIR_LOGS])); #endif for (i = 0; i < DEFAULT_DIR_LAST; i++) diff --git a/intl/msg_hash_lbl.h b/intl/msg_hash_lbl.h index 50ee9ca329..a0f0b92e35 100644 --- a/intl/msg_hash_lbl.h +++ b/intl/msg_hash_lbl.h @@ -647,6 +647,8 @@ MSG_HASH(MENU_ENUM_LABEL_LOGGING_SETTINGS, "logging_settings") MSG_HASH(MENU_ENUM_LABEL_LOG_VERBOSITY, "log_verbosity") +MSG_HASH(MENU_ENUM_LABEL_LOG_TO_FILE, + "log_to_file") MSG_HASH(MENU_ENUM_LABEL_MAIN_MENU, "main_menu") MSG_HASH(MENU_ENUM_LABEL_MANAGEMENT, @@ -1811,3 +1813,5 @@ MSG_HASH(MENU_ENUM_LABEL_VIBRATE_ON_KEYPRESS, "vibrate_on_keypress") MSG_HASH(MENU_ENUM_LABEL_ENABLE_DEVICE_VIBRATION, "enable_device_vibration") +MSG_HASH(MENU_ENUM_LABEL_LOG_DIR, + "log_dir") diff --git a/intl/msg_hash_us.h b/intl/msg_hash_us.h index daa8ca33aa..fe06a6aad5 100644 --- a/intl/msg_hash_us.h +++ b/intl/msg_hash_us.h @@ -1616,6 +1616,14 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_LOG_VERBOSITY, "Logging Verbosity" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_LOG_TO_FILE, + "Log To File" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_LOG_TO_FILE, + "Redirects system event log messages to file. Requires 'Logging Verbosity' to be enabled." + ) MSG_HASH( MENU_ENUM_LABEL_VALUE_MAIN_MENU, "Main Menu" @@ -8494,3 +8502,11 @@ MSG_HASH( MENU_ENUM_LABEL_VALUE_ENABLE_DEVICE_VIBRATION, "Enable device vibration (for supported cores)" ) +MSG_HASH( + MENU_ENUM_LABEL_VALUE_LOG_DIR, + "System Event Logs" + ) +MSG_HASH( + MENU_ENUM_SUBLABEL_LOG_DIR, + "Save system event log files to this directory." + ) diff --git a/menu/cbs/menu_cbs_sublabel.c b/menu/cbs/menu_cbs_sublabel.c index b55f1ae374..de341c3a1e 100644 --- a/menu/cbs/menu_cbs_sublabel.c +++ b/menu/cbs/menu_cbs_sublabel.c @@ -143,6 +143,8 @@ default_sublabel_macro(action_bind_sublabel_systeminfo_cpu_cores, MENU_ default_sublabel_macro(action_bind_sublabel_toggle_gamepad_combo, MENU_ENUM_SUBLABEL_INPUT_MENU_ENUM_TOGGLE_GAMEPAD_COMBO) default_sublabel_macro(action_bind_sublabel_show_hidden_files, MENU_ENUM_SUBLABEL_SHOW_HIDDEN_FILES) default_sublabel_macro(action_bind_sublabel_log_verbosity, MENU_ENUM_SUBLABEL_LOG_VERBOSITY) +default_sublabel_macro(action_bind_sublabel_log_to_file, MENU_ENUM_SUBLABEL_LOG_TO_FILE) +default_sublabel_macro(action_bind_sublabel_log_dir, MENU_ENUM_SUBLABEL_LOG_DIR) default_sublabel_macro(action_bind_sublabel_video_monitor_index, MENU_ENUM_SUBLABEL_VIDEO_MONITOR_INDEX) default_sublabel_macro(action_bind_sublabel_video_refresh_rate_auto, MENU_ENUM_SUBLABEL_VIDEO_REFRESH_RATE_AUTO) default_sublabel_macro(action_bind_sublabel_video_hard_sync, MENU_ENUM_SUBLABEL_VIDEO_HARD_SYNC) @@ -2129,6 +2131,12 @@ int menu_cbs_init_bind_sublabel(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_LOG_VERBOSITY: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_log_verbosity); break; + case MENU_ENUM_LABEL_LOG_TO_FILE: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_log_to_file); + break; + case MENU_ENUM_LABEL_LOG_DIR: + BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_log_dir); + break; case MENU_ENUM_LABEL_SHOW_HIDDEN_FILES: BIND_ACTION_SUBLABEL(cbs, action_bind_sublabel_show_hidden_files); break; diff --git a/menu/cbs/menu_cbs_title.c b/menu/cbs/menu_cbs_title.c index 0274020a6c..4da8251556 100644 --- a/menu/cbs/menu_cbs_title.c +++ b/menu/cbs/menu_cbs_title.c @@ -213,6 +213,7 @@ default_fill_title_macro(action_get_title_assets_directory, MENU_ENUM_LABE default_fill_title_macro(action_get_title_extraction_directory, MENU_ENUM_LABEL_VALUE_CACHE_DIRECTORY) default_fill_title_macro(action_get_title_menu, MENU_ENUM_LABEL_VALUE_MENU_SETTINGS) default_fill_title_macro(action_get_title_font_path, MENU_ENUM_LABEL_VALUE_XMB_FONT) +default_fill_title_macro(action_get_title_log_dir, MENU_ENUM_LABEL_VALUE_LOG_DIR) default_title_copy_macro(action_get_title_help, MENU_ENUM_LABEL_VALUE_HELP_LIST) default_title_copy_macro(action_get_title_input_settings, MENU_ENUM_LABEL_VALUE_INPUT_SETTINGS) @@ -715,6 +716,9 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs, case MENU_ENUM_LABEL_RGUI_CONFIG_DIRECTORY: BIND_ACTION_GET_TITLE(cbs, action_get_title_config_directory); break; + case MENU_ENUM_LABEL_LOG_DIR: + BIND_ACTION_GET_TITLE(cbs, action_get_title_log_dir); + break; case MENU_ENUM_LABEL_INFORMATION_LIST: BIND_ACTION_GET_TITLE(cbs, action_get_title_information_list); break; @@ -1047,6 +1051,9 @@ static int menu_cbs_init_bind_title_compare_label(menu_file_list_cbs_t *cbs, case MENU_LABEL_RGUI_CONFIG_DIRECTORY: BIND_ACTION_GET_TITLE(cbs, action_get_title_config_directory); break; + case MENU_LABEL_LOG_DIR: + BIND_ACTION_GET_TITLE(cbs, action_get_title_log_dir); + break; case MENU_LABEL_INFORMATION_LIST: BIND_ACTION_GET_TITLE(cbs, action_get_title_information_list); break; diff --git a/menu/menu_displaylist.c b/menu/menu_displaylist.c index dc34e08f16..c9cccbd4f5 100644 --- a/menu/menu_displaylist.c +++ b/menu/menu_displaylist.c @@ -5498,6 +5498,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_LIBRETRO_LOG_LEVEL, PARSE_ONLY_UINT, false); + menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_LOG_TO_FILE, + PARSE_ONLY_BOOL, false); { settings_t *settings = config_get_ptr(); @@ -6735,6 +6738,9 @@ bool menu_displaylist_ctl(enum menu_displaylist_ctl_state type, menu_displaylist menu_displaylist_parse_settings_enum(menu, info, MENU_ENUM_LABEL_CACHE_DIRECTORY, PARSE_ONLY_DIR, false); + menu_displaylist_parse_settings_enum(menu, info, + MENU_ENUM_LABEL_LOG_DIR, + PARSE_ONLY_DIR, false); info->need_refresh = true; info->need_push = true; diff --git a/menu/menu_setting.c b/menu/menu_setting.c index 9217f2be3f..3b03386ba5 100644 --- a/menu/menu_setting.c +++ b/menu/menu_setting.c @@ -3321,11 +3321,33 @@ void general_write_handler(rarch_setting_t *setting) break; case MENU_ENUM_LABEL_LOG_VERBOSITY: if (!verbosity_is_enabled()) + { + rarch_log_file_init(); verbosity_enable(); + } else + { verbosity_disable(); + rarch_log_file_deinit(); + } retroarch_override_setting_unset(RARCH_OVERRIDE_SETTING_VERBOSITY, NULL); break; + case MENU_ENUM_LABEL_LOG_TO_FILE: + if (verbosity_is_enabled()) + { + if (settings->bools.log_to_file && !is_logging_to_file()) + rarch_log_file_init(); + else if (!settings->bools.log_to_file && is_logging_to_file()) + rarch_log_file_deinit(); + } + break; + case MENU_ENUM_LABEL_LOG_DIR: + if (verbosity_is_enabled() && is_logging_to_file()) + { + rarch_log_file_deinit(); + rarch_log_file_init(); + } + break; case MENU_ENUM_LABEL_VIDEO_SMOOTH: video_driver_set_filtering(1, settings->bools.video_smooth); break; @@ -4938,6 +4960,21 @@ static bool setting_append_list( &setting_get_string_representation_uint_libretro_log_level; settings_data_list_current_add_flags(list, list_info, SD_FLAG_ADVANCED); + CONFIG_BOOL( + list, list_info, + &settings->bools.log_to_file, + MENU_ENUM_LABEL_LOG_TO_FILE, + MENU_ENUM_LABEL_VALUE_LOG_TO_FILE, + default_log_to_file, + MENU_ENUM_LABEL_VALUE_OFF, + MENU_ENUM_LABEL_VALUE_ON, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler, + SD_FLAG_ADVANCED); + END_SUB_GROUP(list, list_info, parent_group); START_SUB_GROUP(list, list_info, "Performance Counters", &group_info, &subgroup_info, @@ -11414,6 +11451,21 @@ static bool setting_append_list( general_read_handler); (*list)[list_info->index - 1].action_start = directory_action_start_generic; + CONFIG_DIR( + list, list_info, + settings->paths.log_dir, + sizeof(settings->paths.log_dir), + MENU_ENUM_LABEL_LOG_DIR, + MENU_ENUM_LABEL_VALUE_LOG_DIR, + g_defaults.dirs[DEFAULT_DIR_LOGS], + MENU_ENUM_LABEL_VALUE_DIRECTORY_DEFAULT, + &group_info, + &subgroup_info, + parent_group, + general_write_handler, + general_read_handler); + (*list)[list_info->index - 1].action_start = directory_action_start_generic; + END_SUB_GROUP(list, list_info, parent_group); END_GROUP(list, list_info, parent_group); break; diff --git a/msg_hash.h b/msg_hash.h index c3b8b033bf..6e9d9443ec 100644 --- a/msg_hash.h +++ b/msg_hash.h @@ -1393,6 +1393,7 @@ enum msg_hash_enums MENU_ENUM_LABEL_VOLUME_DOWN, MENU_LABEL(LOG_VERBOSITY), + MENU_LABEL(LOG_TO_FILE), MENU_ENUM_LABEL_OVERLAY_NEXT, @@ -1703,6 +1704,7 @@ enum msg_hash_enums MENU_LABEL(VIDEO_SHADER_DIR), MENU_LABEL(VIDEO_FILTER_DIR), MENU_LABEL(AUDIO_FILTER_DIR), + MENU_LABEL(LOG_DIR), MENU_LABEL(TURBO_DEADZONE_LIST), MENU_LABEL(LIBRETRO_DIR_PATH), @@ -2477,6 +2479,7 @@ enum msg_hash_enums #define MENU_LABEL_RGUI_CONFIG_DIRECTORY 0x0cb3e005U #define MENU_LABEL_ASSETS_DIRECTORY 0xde1ae8ecU #define MENU_LABEL_CACHE_DIRECTORY 0x851dfb8dU +#define MENU_LABEL_LOG_DIR 0x87BB87E5U /* RDB settings */ diff --git a/retroarch.c b/retroarch.c index 5b882e08d3..f98616fd73 100644 --- a/retroarch.c +++ b/retroarch.c @@ -187,7 +187,6 @@ enum RA_OPT_FEATURES, RA_OPT_VERSION, RA_OPT_EOF_EXIT, - RA_OPT_LOG_FILE, RA_OPT_MAX_FRAMES, RA_OPT_MAX_FRAMES_SCREENSHOT, RA_OPT_MAX_FRAMES_SCREENSHOT_PATH @@ -292,6 +291,8 @@ static retro_time_t libretro_core_runtime_usec = 0; static char runtime_content_path[PATH_MAX_LENGTH] = {0}; static char runtime_core_path[PATH_MAX_LENGTH] = {0}; +static bool log_file_created = false; + extern bool input_driver_flushing_input; static char launch_arguments[4096]; @@ -1084,7 +1085,6 @@ static void retroarch_print_help(const char *arg0) puts(" -h, --help Show this help message."); puts(" -v, --verbose Verbose logging."); - puts(" --log-file FILE Log messages to FILE."); puts(" --version Show version."); puts(" --features Prints available features compiled into " "program."); @@ -1277,9 +1277,6 @@ static void retroarch_parse_input_and_config(int argc, char *argv[]) { "max-frames-ss-path", 1, NULL, RA_OPT_MAX_FRAMES_SCREENSHOT_PATH }, { "eof-exit", 0, NULL, RA_OPT_EOF_EXIT }, { "version", 0, NULL, RA_OPT_VERSION }, -#ifdef HAVE_FILE_LOGGER - { "log-file", 1, NULL, RA_OPT_LOG_FILE }, -#endif { NULL, 0, NULL, 0 } }; @@ -1735,12 +1732,6 @@ static void retroarch_parse_input_and_config(int argc, char *argv[]) retroarch_print_version(); exit(0); - #ifdef HAVE_FILE_LOGGER - case RA_OPT_LOG_FILE: - retro_main_log_file_init(optarg); - break; - #endif - case 'c': case 'h': case RA_OPT_APPENDCONFIG: @@ -1759,19 +1750,8 @@ static void retroarch_parse_input_and_config(int argc, char *argv[]) } } - if (verbosity_is_enabled()) - { - settings_t *settings = config_get_ptr(); - if (settings->bools.log_to_file && - !string_is_empty(settings->paths.log_dir) && !string_is_empty(settings->paths.log_file)) - { - char buf[PATH_MAX_LENGTH]; - fill_pathname_join(buf, settings->paths.log_dir, settings->paths.log_file, sizeof(buf)); - RARCH_LOG("Logging to file: %s\n", buf); - retro_main_log_file_init(buf); - } - } + rarch_log_file_init(); #ifdef HAVE_GIT_VERSION RARCH_LOG("RetroArch %s (Git %s)\n", @@ -1975,7 +1955,8 @@ bool retroarch_main_init(int argc, char *argv[]) rarch_error_on_init = true; - retro_main_log_file_init(NULL); + /* Have to initialise non-file logging once at the start... */ + retro_main_log_file_init(NULL, false); retroarch_parse_input_and_config(argc, argv); @@ -1993,8 +1974,8 @@ bool retroarch_main_init(int argc, char *argv[]) RARCH_LOG_OUTPUT("CPU Model Name: %s\n", cpu_model); retroarch_get_capabilities(RARCH_CAPABILITIES_CPU, str, sizeof(str)); - fprintf(stderr, "%s: %s\n", msg_hash_to_str(MSG_CAPABILITIES), str); - fprintf(stderr, "Built: %s\n", __DATE__); + RARCH_LOG_OUTPUT("%s: %s\n", msg_hash_to_str(MSG_CAPABILITIES), str); + RARCH_LOG_OUTPUT("Built: %s\n", __DATE__); RARCH_LOG_OUTPUT("Version: %s\n", PACKAGE_VERSION); #ifdef HAVE_GIT_VERSION RARCH_LOG_OUTPUT("Git: %s\n", retroarch_git_version); @@ -5296,3 +5277,74 @@ finish: free(info_buf); #endif } + +void rarch_log_file_init(void) +{ + settings_t *settings = config_get_ptr(); + FILE *fp = NULL; + bool success = false; + + /* If nothing has changed, do nothing */ + if ((!settings->bools.log_to_file && !is_logging_to_file()) || + (settings->bools.log_to_file && is_logging_to_file())) + return; + + /* If we are currently logging to file and wish to stop, + * de-initialise existing logger... */ + if (!settings->bools.log_to_file && is_logging_to_file()) + { + retro_main_log_file_deinit(); + /* ...and revert to console */ + retro_main_log_file_init(NULL, false); + return; + } + + /* If we reach this point, then we are not currently + * logging to file, and wish to do so */ + + /* > Check whether we are already logging to console */ + fp = retro_main_log_file(); + if (fp) + { + /* De-initialise existing logger */ + retro_main_log_file_deinit(); + } + + /* > Attempt to initialise log file */ + if (!string_is_empty(settings->paths.log_dir)) + { + char buf[PATH_MAX_LENGTH]; + fill_pathname_join(buf, settings->paths.log_dir, file_path_str(FILE_PATH_DEFAULT_EVENT_LOG), sizeof(buf)); + if (!string_is_empty(buf)) + { + /* When RetroArch is launched, log file is overwritten. + * On subsequent calls within the same session, it is appended to. */ + retro_main_log_file_init(buf, log_file_created); + log_file_created = true; + success = true; + } + } + + /* > Fall back to console logging if something went wrong */ + if (!success) + retro_main_log_file_init(NULL, false); +} + +void rarch_log_file_deinit(void) +{ + FILE *fp = NULL; + + /* De-initialise existing logger, if currently logging to file */ + if (is_logging_to_file()) + { + retro_main_log_file_deinit(); + } + + /* If logging is currently disabled... */ + fp = retro_main_log_file(); + if (!fp) + { + /* ...initialise logging to console */ + retro_main_log_file_init(NULL, false); + } +} diff --git a/retroarch.h b/retroarch.h index 721938f379..8063848ae9 100644 --- a/retroarch.h +++ b/retroarch.h @@ -428,6 +428,10 @@ bool rarch_write_debug_info(void); void rarch_get_cpu_architecture_string(char *cpu_arch_str, size_t len); +void rarch_log_file_init(void); + +void rarch_log_file_deinit(void); + RETRO_END_DECLS #endif diff --git a/verbosity.c b/verbosity.c index 662198dee0..8c05d20055 100644 --- a/verbosity.c +++ b/verbosity.c @@ -111,7 +111,7 @@ void *retro_main_log_file(void) return log_file_fp; } -void retro_main_log_file_init(const char *path) +void retro_main_log_file_init(const char *path, bool append) { if (log_file_initialized) return; @@ -125,7 +125,7 @@ void retro_main_log_file_init(const char *path) if (path == NULL) return; - log_file_fp = (FILE*)fopen_utf8(path, "wb"); + log_file_fp = (FILE*)fopen_utf8(path, append ? "ab" : "wb"); log_file_initialized = true; #if !defined(PS2) /* TODO: PS2 IMPROVEMENT */ @@ -145,6 +145,8 @@ void retro_main_log_file_deinit(void) if (log_file_buf) free(log_file_buf); log_file_buf = NULL; + + log_file_initialized = false; } #if !defined(HAVE_LOGGER) @@ -210,11 +212,7 @@ void RARCH_LOG_V(const char *tag, const char *fmt, va_list ap) #if defined(HAVE_QT) || defined(__WINRT__) char buffer[1024]; #endif -#ifdef HAVE_FILE_LOGGER FILE *fp = (FILE*)retro_main_log_file(); -#else - FILE *fp = stderr; -#endif #if defined(HAVE_QT) || defined(__WINRT__) buffer[0] = '\0'; diff --git a/verbosity.h b/verbosity.h index 546066af61..e6d11dbbd8 100644 --- a/verbosity.h +++ b/verbosity.h @@ -39,7 +39,7 @@ void *retro_main_log_file(void); void retro_main_log_file_deinit(void); -void retro_main_log_file_init(const char *path); +void retro_main_log_file_init(const char *path, bool append); bool is_logging_to_file(void);